服务绑定和取消绑定 Android 中的混淆



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

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

服务在后台完成后,我正在尝试停止该服务。我正在使用停止服务((。但是我收到活动泄漏服务连接错误。在阅读了 SO 问题之后,了解到当服务与 BIND_AUTO_CREATE 绑定时,我们不能使用 stopService 停止服务。

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

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

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

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

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

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

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

最新更新