我已经阅读了许多帖子,指出打ze模式在link某个特定时刻杀死了正在运行的服务,或者他们想执行长时间运行的线程。
我不明白为什么您应该使用服务来执行后台工作,而您知道该服务最终会停止。
例如:
您可以使用一个简单的线程:
new Thread(new Runnable).start()
并做一些工作。使用这个:
因此,您可以不受任何限制地进行后台工作。尽管出于这些原因link,您应该使用服务。
这是进行后台工作的另一种方法(当然不是更好,但还是一种方法)吗?我错了吗?
答案 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
。