【问题标题】:Android Start/Stop a serviceAndroid 启动/停止服务
【发布时间】:2012-04-18 03:25:51
【问题描述】:
我有一个包含多个活动的应用程序。所有活动都必须访问本地服务。我希望服务在我启动应用程序时启动,并在
时停止
a) App 被销毁(返回键)
b) 应用程序已停止(主页键)
c) 设备处于深度睡眠(电源键)
基本上,当没有可见活动时,服务不应该运行。
我在 onResume() 中的每个活动中绑定服务,并在 onPause() 中的每个活动中取消绑定服务。不幸的是,每次切换 Activity 时都会重新创建服务,因为在新 Activity 绑定它之前,该服务未绑定。
现在有人要怎么预防吗?
【问题讨论】:
标签:
android
service
android-activity
【解决方案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
因此,有两个活动被绑定到服务上,这完全没有害处。当没有活动绑定时,服务将停止。
【解决方案2】:
看看this。
但是,如果您选择实现 onStartCommand() 回调
方法,那么您必须显式停止该服务,因为该服务
现在考虑开始。在这种情况下,服务会一直运行到
服务通过 stopSelf() 或其他组件调用自行停止
stopService(),不管是否绑定到任何客户端。