我有一个由多个活动组成的应用程序。所有活动都必须访问本地服务。我希望在启动应用程序时启动服务,并在
时停止a)应用程序被销毁(后退键)
b)应用已停止(主页键)
c)设备处于深度睡眠状态(电源键)
基本上,当没有可见活动时,服务不应该运行。
我在onResume()中的每个活动中绑定服务,并取消绑定onPause()中每个活动中的服务。不幸的是,每次切换活动时都会重新创建服务,因为服务在新活动绑定之前就会被解除绑定。
现在有人如何预防?
答案 0 :(得分:1)
假设您与Context.BIND_AUTO_CREATE绑定,那么您就在那里。在onStart()中绑定服务并在onStop()中解除绑定。您应该发现第二个活动的开始发生在第一个活动停止之前,因为应用程序从第一个活动切换到第二个活动。我在我的应用程序中使用了这种技术并记录了所有的..方法;当我切换时,它们按此顺序出现:
FIRST Activity onCreate
FIRST Activity onStart
FIRST Activity onResume
FIRST Activity onPause
SECOND Activity onCreate
SECOND Activity onStart
SECOND Activity onResume
FIRST Activity onStop
因此,在短暂的时间内,两项活动都与服务绑定,这根本不会造成任何伤害。如果没有绑定任何活动,服务将停止。
答案 1 :(得分:0)
看看this。
但是,如果您选择实现onStartCommand()回调 方法,那么你必须明确停止服务,因为服务 现在被认为是开始了。在这种情况下,服务运行直到 该服务使用stopSelf()或其他组件调用自行停止 stopService(),无论它是否绑定到任何客户端。