Android启动/停止服务

时间:2012-04-17 18:58:52

标签: android service android-activity

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

时停止

a)应用程序被销毁(后退键)

b)应用已停止(主页键)

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

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

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

现在有人如何预防?

2 个答案:

答案 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(),无论它是否绑定到任何客户端。