【发布时间】:2014-11-01 10:40:43
【问题描述】:
我有一个设计为始终在后台运行的 android 服务,类似于 WhatsApp 的 MessageService 所做的。当应用程序启动时,它会确保服务确实在运行。稍后,其中一个活动绑定到服务以使用它的一些方法,除了服务已经做的事情之外,当活动销毁时 - 它与服务解除绑定。 到目前为止一切顺利,这似乎有效。
但是当我关闭我的应用程序(通常不是强制停止)时,服务似乎会在一分钟左右自行重启,然后继续正常工作。 但是当我查看 WhatsApp 的服务时,我发现这并没有发生 - 在您关闭应用程序后,服务继续正常运行并且不会自行重启。
关于导致此问题的原因以及如何解决它的任何提示?
编辑 代码,按要求:
服务的相关部分:
public static boolean isRunning = false;
...
...
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
if (!isRunning) {
isRunning = true;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
connect(intent.getIntExtra(Constants.ID, -1),
intent.getStringExtra(Constants.PASSWORD));
}
});
thread.start();
}
return START_REDELIVER_INTENT;
......
}
在应用启动时启动服务
if (!ChatService.isRunning) {
Intent chatService = new Intent(this, ChatService.class);
chatService.putExtra(Constants.ID, LocalManager.getID());
chatService.putExtra(Constants.PASSWORD, LocalManager.getPassword());
startService(chatService);
}
在其中一个活动中绑定到服务
void bindService() {
bindService(new Intent(Chats.this, ChatService.class), mConnection,
Context.BIND_AUTO_CREATE);
mIsBound = true;
}
第二次编辑 事实证明它与绑定到服务无关,即使我没有绑定到服务也会发生相同的行为(应用程序关闭时服务会重新启动)。在单独的进程上运行服务也没有解决这个问题。
【问题讨论】:
-
向我们展示您的代码、服务、活动,以及您开始服务的位置。
-
添加了@Romadja 代码块。
-
那么,您现在的问题是什么?如果您返回 START_REDELIVER_INTENT 则意味着您已准备好销毁服务,并且可以重新建立它,因此不会造成任何问题。
-
你在哪里打电话给
stopService()? -
@Flow 我根本不叫这个。