2

我有一个包含多个活动的应用程序。所有活动都必须访问本地服务。我希望在启动应用程序时启动服务,并在启动应用程序时停止

a) App 被销毁(返回键)

b) 应用程序停止(主页键)

c) 设备处于深度睡眠(电源键)

基本上,当没有可见活动时,服务不应该运行。

我在 onResume() 中的每个活动中绑定服务,并在 onPause() 中的每个活动中取消绑定服务。不幸的是,每次我切换活动时都会重新创建服务,因为在新活动绑定它之前服务会被解除绑定。

有人现在如何防止这种情况吗?

4

2 回答 2

1

假设您正在与 Context.BIND_AUTO_CREATE 绑定,那么您就快到了。在 onStart() 中绑定服务并在 onStop() 中取消绑定。当应用程序从第一个活动切换到第二个活动时,您应该会发现第二个活动的开始发生在第一个活动的停止之前。我在我的应用程序中使用了这种技术并记录了所有 on.. 方法;当我切换时,它们按此顺序发生:

 FIRST Activity onCreate
 FIRST Activity onStart
 FIRST Activity onResume
 FIRST Activity onPause
 SECOND Activity onCreate
 SECOND Activity onStart
 SECOND Activity onResume
 FIRST Activity onStop

因此,暂时有两个活动与服务绑定,这完全没有害处。当没有活动绑定时,服务将停止。

于 2012-04-17T19:25:51.253 回答
0

看看这个

但是,如果选择实现 onStartCommand() 回调方法,则必须显式停止服务,因为现在认为服务已启动。在这种情况下,服务将一直运行,直到服务使用 stopSelf() 或另一个组件调用 stopService() 自行停止,无论它是否绑定到任何客户端。

于 2012-04-17T19:18:33.770 回答