我有一个包含多个活动的应用程序。所有活动都必须访问本地服务。我希望在启动应用程序时启动服务,并在启动应用程序时停止
a) App 被销毁(返回键)
b) 应用程序停止(主页键)
c) 设备处于深度睡眠(电源键)
基本上,当没有可见活动时,服务不应该运行。
我在 onResume() 中的每个活动中绑定服务,并在 onPause() 中的每个活动中取消绑定服务。不幸的是,每次我切换活动时都会重新创建服务,因为在新活动绑定它之前服务会被解除绑定。
有人现在如何防止这种情况吗?
我有一个包含多个活动的应用程序。所有活动都必须访问本地服务。我希望在启动应用程序时启动服务,并在启动应用程序时停止
a) App 被销毁(返回键)
b) 应用程序停止(主页键)
c) 设备处于深度睡眠(电源键)
基本上,当没有可见活动时,服务不应该运行。
我在 onResume() 中的每个活动中绑定服务,并在 onPause() 中的每个活动中取消绑定服务。不幸的是,每次我切换活动时都会重新创建服务,因为在新活动绑定它之前服务会被解除绑定。
有人现在如何防止这种情况吗?
假设您正在与 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
因此,暂时有两个活动与服务绑定,这完全没有害处。当没有活动绑定时,服务将停止。
看看这个。
但是,如果选择实现 onStartCommand() 回调方法,则必须显式停止服务,因为现在认为服务已启动。在这种情况下,服务将一直运行,直到服务使用 stopSelf() 或另一个组件调用 stopService() 自行停止,无论它是否绑定到任何客户端。