Android 多线程与服务的典型用例是什么?
由于线程在生成它们的活动的生命周期之后仍然存在,因此我可以将需要在HandlerThreads上执行的任何后台工作放在上面,例如,不需要服务。此外,当应用程序在后台绕过新的Oreo限制时,它们将继续运行 我是不是遗漏了什么 另外,自从引入了打盹模式,并且对Oreo的后台工作增加了更多的限制之后,我应该在什么时候使用服务来做后台工作呢?除了 安排未来条件下的任务,如WIFI连接或收费,然后我将使用作业调度器。但即使这样也可以通过广播接收器处理 此外,当应用程序在后台绕过新的Oreo限制时,它们将继续运行 那不太对。确实,只要你的应用程序还活着,后台线程就会继续执行。问题是,你的应用程序可能无法运行很长时间!Android 多线程与服务的典型用例是什么?,android,android-asynctask,android-service,android-jobscheduler,android-intentservice,Android,Android Asynctask,Android Service,Android Jobscheduler,Android Intentservice,由于线程在生成它们的活动的生命周期之后仍然存在,因此我可以将需要在HandlerThreads上执行的任何后台工作放在上面,例如,不需要服务。此外,当应用程序在后台绕过新的Oreo限制时,它们将继续运行 我是不是遗漏了什么 另外,自从引入了打盹模式,并且对Oreo的后台工作增加了更多的限制之后,我应该在什么时候使用服务来做后台工作呢?除了 安排未来条件下的任务,如WIFI连接或收费,然后我将使用作业调度器。但即使这样也可以通过广播接收器处理 此外,当应用程序在后台绕过新的Oreo限制时,它们将继
服务
用于向操作系统表明,“我不想被拆毁;我还有一些有用的工作要做”
从:
…[服务表示]应用程序希望在不与用户交互的情况下执行更长时间的运行操作,或提供供其他应用程序使用的功能
及
它本身并不是一种完成主线程工作的方法
最终,当安卓决定是否保留你的应用程序时,它并不关心你正在运行的线程数、尚未完成的倒计时程序数、你在队列中等待的可运行程序数,等等。它关心您是否有任何活动的应用程序组件。活动是否可见?太好了,留下来。服务是否已启动?也很好。以上都没有?也许是时候终止应用程序了
因此,这也回答了一个问题,“我应该在什么时候使用服务来做后台工作?”正如前面提到的,服务不会为你做这些工作,它只会帮助你保持活力。您可以尝试在广播接收器中启动一个线程(请注意),但一旦从onReceive()
返回,您的应用程序很可能会被终止,除非您的服务也在运行
附加的奥利奥后注意事项
请注意,服务
可能只会在应用程序离开前台后帮助应用程序保持“几分钟”的活动状态()。我所知道的解决这个问题的唯一方法是通过将服务
变成“前台服务”回到前台
此外,如果您需要确保设备在工作完成之前保持唤醒状态,则需要在前台安装一个组件。也就是说,您仍然可以在“后台”(即“屏幕外”)中完成这项工作,但您需要一个“前台服务”(操作栏中的图标)。否则,将应用Doze,这会抑制应用程序正在使用的任何WakeLocks