【发布时间】: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