【问题标题】: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(),不管是否绑定到任何客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多