【问题标题】:Activity and binder service活动和活页夹服务
【发布时间】:2016-07-31 19:42:41
【问题描述】:

在我的应用程序中,我使用后台服务来获取一些后台数据。我使用

启动服务
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

mConnection 是 ServiceConnection 的实例。

在服务中,我不断获取一些数据并对其进行验证,如果检查通过,我会播放声音。因此,当发生这种情况时,用户可以在活动屏幕上按下停止按钮。这将调用 unbind(mConnection),这将破坏我停止声音的服务。 我的问题是,当服务在后台运行时,同时 Android 终止了活动,那么用户如何能够停止服务。我需要 mConnection 来取消绑定服务,并且我无法将 mConnection 存储在 onSaveInstanceState 的 Bundle 中。

【问题讨论】:

  • 使用 IntentService 和广播接收器(startService 调用)而不是绑定服务会不会更好,因为它只是您想要执行的特定后台任务,而不是许多不同的任务?
  • 嗨,马克,我想维护活动用户界面,这样如果用户想在两者之间停止后台服务,那么他/她可以使用停止按钮来完成。 IntentService,一旦启动,将不受用户控制。
  • 为什么不在服务中使用 Executor/Threadpool/Runnable/,这样您仍然可以通过向 Executor 上的 shutdownNow() 发送命令来进行控制 - 这样服务就不会绑定到Activity生命周期,你可以保持对服务中执行线程的控制。
  • 你的问题到底是什么?
  • 嗨pskink,我担心android系统杀死客户端活动的情况。所以它也会杀死活页夹服务。即使客户端活动被操作系统杀死,我也希望服务继续运行,当用户返回活动时,他/她将其恢复为原始状态,以便用户可以与其交互以停止服务(如果需要)。也就是说,服务生命周期不受活动生命周期的影响。

标签: android android-service-binding


【解决方案1】:

如果您使用 bindService(...) 方法启动服务,那么当活动被系统终止时,服务也会终止。它的生命周期与活动绑定。顺便说一句,系统将杀死进程而不仅仅是活动。当您使用 startService() 和 START_STICKY 启动服务时,情况会有所不同。

在您的情况下,您不必担心。只要活动停止,您的服务也会停止。

【讨论】:

  • 我的目标是即使父 Activity 被 Android 杀死,Activity 也能继续工作,如果用户重新访问该 Activity,那么它会恢复到与之前相同的 UI 状态。可行吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多