2012-08-13 19 views
1

你好,我有一个小聊天应用程序,绑定到我的服务创建一个与我的服务器的TCP/IP连接。 我使用aidl btw。Android unbindService

我的问题是,我不知道要处理屏幕方向,特别是在销毁方法。

我希望我的服务始终处于在线状态,并且我不想在应用程序破坏时停止它。

现在我已经对“onDestroy”方法unbindService(conn)解决了“泄漏连接问题”。

当活动被重新创建后被冻结。 谢谢,这里有一些代码片段。

serviceIntent = new Intent(getApplicationContext(),ChatService.class); 
    boolean result = bindService(serviceIntent, conn,Context.BIND_AUTO_CREATE); 
    startService(new Intent(getApplicationContext(),ChatService.class)); 
    Log.d(TAG, "Service binded"); 

@Override 
protected void onDestroy() { 
    Log.d(TAG, "ON DESTROY"); 
    unbindService(conn); 
    super.onDestroy(); 
} 

回答

2

服务没有用户界面,因此您可能会说这不取决于您的服务,而是您的活动。返回START_STICKYonStartCommand()它告诉你它必须运行,即使你解除绑定,基本上你可以绑定/解除绑定任何时间到持久性(不持续,直到android操作系统决定杀死它)运行服务。

在您的活动中覆盖onConfigurationChange()方法并且什么都不做,那么在您的清单中使用android:configChanges="orientation"

+0

Thak你,这工作:android:configChanges =“orientation” – Catalin 2012-08-18 22:13:27

0

寻找到一个ServicestartForeground()link)。如果您可以让Service死亡但重新启动,请查看onStartCommand()START_STICKY

0

每次都会发生这种情况,就像您遇到的情况一样。有一个绑定的服务实际上试图保持该活动在内存中的时间比其他时间长。我建议不要从onDestory的服务中解除绑定。我会根据命令取消绑定您的服务,如注销按钮而不是生命周期事件。

所以当你的屏幕旋转时,你不会取消绑定它只会重新绑定已经运行的服务。如果你的用户杀死Activity,那么服务应该在某个时候清理干净,因为系统应该看到一个绑定的Service正在运行而没有附加任何东西,然后它将被系统清理。

+0

你好,谢谢你的回复。我从onDestroy中删除解除绑定,然后我得到“活动泄漏了最初绑定在这里的ServiceConnection”,并崩溃我的应用程序。 – Catalin 2012-08-13 14:07:04

相关问题