1

您好,我有一个小聊天应用程序,它绑定到我的服务,该服务与我的服务器创建 tcp/ip 连接。我使用aidl顺便说一句。

我的问题是我不知道如何处理屏幕方向,尤其是在销毁方法上。

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

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

3 回答 3

2

服务没有 UI,因此您可能会说这不取决于您的服务,而是取决于您的活动。返回START_STICKY其中onStartCommand()告诉您即使您取消绑定它也必须运行它,基本上您可以随时绑定/取消绑定到持久(在android OS决定终止它之前不会持久)运行服务。

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

于 2012-08-13T14:04:44.343 回答
0

查看一个ServicestartForeground()链接)。如果您可以让您的Service死亡但重新启动,请查看onStartCommand()and START_STICKY

于 2012-08-13T13:57:15.287 回答
0

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

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

于 2012-08-13T14:01:11.580 回答