Android unbindService

时间:2012-08-13 13:47:42

标签: android android-intent

你好我有一个小聊天应用程序,它绑定到我的服务器,他与我的服务器创建一个tcp / ip连接。 我使用aidl btw。

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

我希望我的服务一直在线,我不想在应用程序销毁时停止它。

现在我使用“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();
}

3 个答案:

答案 0 :(得分:2)

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

在您的活动中覆盖onConfigurationChange()方法并在其中不执行任何操作,然后在清单中使用android:configChanges="orientation"

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这种情况每次都会发生,就像你正在经历的那样。拥有bindedService实际上会尝试将该Activity保留在内存中比其他Activity更长。我建议不要解决onDestory中的服务。我会根据命令取消绑定您的服务,例如注销按钮而不是生命周期事件。

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