Android使用线程进行后台作业

时间:2018-12-17 22:06:45

标签: android android-service android-doze-and-standby

我已经阅读了许多帖子,指出打ze模式在link某个特定时刻杀死了正在运行的服务,或者他们想执行长时间运行的线程。

我不明白为什么您应该使用服务来执行后台工作,而您知道该服务最终会停止。

例如:

您可以使用一个简单的线程:

 new Thread(new Runnable).start()

并做一些工作。使用这个:

  1. 与唤醒锁结合使用,设备将不会进入睡眠状态,线程将继续运行。
  2. 没有打ze模式限制(网络除外,但可以说我们做本地工作)

因此,您可以不受任何限制地进行后台工作。尽管出于这些原因link,您应该使用服务。

这是进行后台工作的另一种方法(当然不是更好,但还是一种方法)吗?我错了吗?

2 个答案:

答案 0 :(得分:0)

除了服务之外,还有很多方法可以进行后台工作。请检查此链接,它可能有助于您为工作选择最佳的选择: Job Scheduler vs Background Service

@TheWanderer所说的服务将在应用程序关闭一段时间后继续工作,这与简单的线程会在应用程序关闭时立即结束一样。

在您链接的链接中阅读此部分

  

与其他后台进程相比,服务具有更高的优先级,并且   因此Android终止它的可能性较小。虽然可以   配置为在有足够资源可用时重新启动   再次。您应该经历不同的过程及其   有关流程和流程的文档中的优先级/重要级别   线程。为它们分配与前台活动相同的优先级是   在这种情况下,绝对有可能需要   通知处于活动状态(通常用于服务播放音乐)。

答案 1 :(得分:0)

如果您正在运行从Activity开始的后台线程,则Android不会知道您正在托管Activity的OS进程中进行后台工作。 Android几乎随时都可以终止托管Activity的OS进程。如果用户按下HOME按钮或接听电话或打开通知并转到另一个应用程序,则Android可以随时终止OS进程。当用户返回到您的应用程序时,Android将创建一个新的OS Process并重新创建所有相关的活动,但是您的后台线程无可避免地会丢失。这就是Android提供服务的原因。

如果启动Service来执行后台处理,则Service也将启动后台线程,但是这些线程是受控的。您的Service告诉Android如果在处理Service时杀死Intent怎么办。因此,可以通知您的Service并根据需要重新启动(或继续)后台处理。您也可以在与运行您的活动的OS进程不同的OS进程中运行Service。如果用户从近期任务列表中删除了您的应用,这将防止Android杀死Service

有了更新的Android SDK,您还可以使用其他机制,例如JobScheduler