Service、WorkManager、Kotlin 协程

6 service android android-workmanager kotlin-coroutines

Services我主要对和感到困惑Coroutines

我不明白为什么应该使用协程以及何时应该使用Services?当我下载文件时,我需要使用服务还是可以直接使用coroutine?他们都无法在死亡过程中幸存下来。

如果我可以使用协程下载文件,我service到底需要什么?

您能否列出所有这些并给出一些我想要使用服务的示例,我将在哪里使用Coroutines以及我将在哪里使用WorkManager

另外,我应该使用AsyncTask吗?因为我读到它有很多缺陷,并且可能会造成内存泄漏。

我还阅读了这篇有关后台工作的文章: https ://developer.android.com/guide/background

但它只讨论了 Workmanager 和 Coroutines,而没有提到服务。为什么?

小智 4

背景工作

https://developer.android.com/guide/background

在 Android 和任何 UI 应用程序中,都有主线程。如果你在主线程上做一些繁重的事情,你将阻止用户的交互。所以你需要在另一个线程中完成这样的工作。您可以使用以下方法在 Android 上执行此操作:

  • 你创建一个线程
  • 具有线程池的执行器
  • 处理程序
  • 异步任务
  • 接收Java
  • 协程

应用程序生命周期

https://developer.android.com/guide/components/activities/process-lifecycle

但Android应用程序的生命周期是一件复杂的事情。您无法知道应用程序何时会终止。这是一个消耗一定资源的过程。当操作系统没有资源时,它会杀死一些应用程序。所以你有优先级,并基于它们 - 应用程序被杀死的可能性较小。它们是上述链接的一部分。正如您可以猜测的那样 - 如果应用程序可见 - 它不太可能死掉。但是,如果您想完成工作,但又不想让用户保持参与,该怎么办?这是链接中的第 3 点:

  • 您可以使用服务

服务的想法是您可以“在后台”执行某些操作,但这并不意味着后台线程。这意味着它位于用户的后台。普通服务在主线程上启动。有一些特定的实现有自己的后台线程。

服务还可以为您提供什么 - 它将降低您的应用程序被终止的可能性。

工作经理

Android中有很多API。这些年来,他们变得越来越多。但与此同时,也有越来越多的限制——必须节省用户的电池。还有网络资源。因此,很难选择正确的 API,同时又能解决这些限制。

于是WM就被发明了。它适用于您希望工作在某个时刻确定完成的情况。即使在设备重新启动时也是如此。但你不太关心时间。上传视频就是最好的例子。如果您想要具有精确周期(例如每 1 小时)的内容 - 您需要使用 AlarmManager。对于 WM,可能是 1 小时、1 个半小时、4 小时、6 小时、1 小时。对于视频 - 可能现在开始,您上传 30MB,并在 2 小时内上传 - 其他 70MB。

当您主动跟踪用户或与用户互动时,您应该使用服务。例如音乐应用程序、运行应用程序等。

WM 的底层是使用服务、广播接收器、房间等。它为您隐藏了很多复杂性。