服务绑定和解除绑定Android的困惑

时间:2016-02-11 10:45:52

标签: android android-service android-service-binding

我正在使用Service来执行长时间运行的过程。我在活动中绑定服务以启动该过程。下面是绑定服务的代码。

val intent = Intent(context,SaveSessionService::class.java)
context.bindService(intent, mSaveSessServiceConnection, AppCompatActivity.BIND_AUTO_CREATE)

服务在后台完成后,我试图停止服务。我正在使用stopService()。但我得到活动泄漏服务连接错误。在对SO Questions进行一些阅读之后,了解到当服务与BIND_AUTO_CREATE绑定时,我们无法使用stopService停止服务。

我的问题是如何连接服务,因为我还读到,为长时间运行服务调用startService也是不可取的。使用IntentService是否更好(我不这么认为,因为根据文档,只有服务应该用于长时间运行的任务)?

一旦我转到服务,我就无法参考活动。我应该可以从服务本身停止服务。

使用这个用例,哪个更好,用startService启动服务还是使用IntentService?

1 个答案:

答案 0 :(得分:0)

  1. 如果您已使用bindService()启动了该服务,则在您没有其他绑定的情况下调用unbindService()后该服务应自动停止。

  2. 如果您使用startService()启动服务,则应使用stopService()停止服务,否则服务可在完成后调用stopSelf()。这通常是首选方法。

  3. 如果最好使用IntentService取决于服务提供的功能 - 问题没有任何关于此的详细信息。

  4. 如前所述,如前所述,您可以使用stopSelf()停止服务本身的服务