【发布时间】:2014-09-26 19:54:48
【问题描述】:
我在我的 MainActivity 中添加了一个本地服务,在 onResume 中,我这样做了
@Override
public void onResume() {
super.onResume()
boolean is_start = isMyServiceRunning(MyService.class)
if (is_start) {
bindMyService()
} else {
startMyService()
bindMyService()
}
}
在 onPause 中,我只是简单地执行“unBindMyService”操作。
另外,我添加了 Context.BIND_AUTO_CREATE 标志来绑定服务,结果很奇怪。
- 用logcat可以看到MyService的“onCreate”和“onBind”,很顺利
- 当我切换到另一个活动或应用程序时,会调用“Unbind”,这是正确的!
- 当我在设置中“强制停止”服务时,会调用服务的“onDestroy”作为响应,没关系。
- 当我从应用程序的“最近列表”中删除应用程序时,没有调用Service的“onDestroy”,我可以解释为服务没有终止。也可以。
- 我无法解释的是,在 4 之后,我再次启动我的应用程序,我注意到服务的“onCreate”和“onBind”被调用,但没有一个服务的“onDestroy”。即使“is_start”为真,服务也会在没有调用“onDestroy”的情况下重新创建。
那么 4 到 5 之间发生了什么?服务还活着还是死了?
【问题讨论】:
-
发布更多代码。 isMyServiceRunning、startMyService 和 bindMyService 方法有什么?
-
smallzhan...我已经执行了所有在役案件...我发现了几件事。我想说的是,一旦执行了 stopservice(),就可以调用 ondestroy in service。
-
可能 5 发生在与 4 不同的进程中,这可能在没有警告的情况下被杀死 - 检查日志中 () 中的进程 ID。
-
@ChrisStratton 我用 logcat 检查了进程 id,发现服务实例的第二个 'onCreate' 和 'onBind' 的 pid 与原来的确实不同。你的意思是当新的服务启动时原来的服务被杀死而不是'onDestroy'?
-
当你从最近刷出它时它被杀死了。然后,它可能会在不久后的某个时间点或很久以后或当用户启动的 Activity 需要它时在新流程中重新创建。