Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多线程与服务的典型用例是什么?_Android_Android Asynctask_Android Service_Android Jobscheduler_Android Intentservice - Fatal编程技术网

Android 多线程与服务的典型用例是什么?

Android 多线程与服务的典型用例是什么?,android,android-asynctask,android-service,android-jobscheduler,android-intentservice,Android,Android Asynctask,Android Service,Android Jobscheduler,Android Intentservice,由于线程在生成它们的活动的生命周期之后仍然存在,因此我可以将需要在HandlerThreads上执行的任何后台工作放在上面,例如,不需要服务。此外,当应用程序在后台绕过新的Oreo限制时,它们将继续运行 我是不是遗漏了什么 另外,自从引入了打盹模式,并且对Oreo的后台工作增加了更多的限制之后,我应该在什么时候使用服务来做后台工作呢?除了 安排未来条件下的任务,如WIFI连接或收费,然后我将使用作业调度器。但即使这样也可以通过广播接收器处理 此外,当应用程序在后台绕过新的Oreo限制时,它们将继

由于线程在生成它们的活动的生命周期之后仍然存在,因此我可以将需要在HandlerThreads上执行的任何后台工作放在上面,例如,不需要服务。此外,当应用程序在后台绕过新的Oreo限制时,它们将继续运行

我是不是遗漏了什么

另外,自从引入了打盹模式,并且对Oreo的后台工作增加了更多的限制之后,我应该在什么时候使用服务来做后台工作呢?除了 安排未来条件下的任务,如WIFI连接或收费,然后我将使用作业调度器。但即使这样也可以通过广播接收器处理

此外,当应用程序在后台绕过新的Oreo限制时,它们将继续运行

那不太对。确实,只要你的应用程序还活着,后台线程就会继续执行。问题是,你的应用程序可能无法运行很长时间!
服务
用于向操作系统表明,“我不想被拆毁;我还有一些有用的工作要做”

从:

…[服务表示]应用程序希望在不与用户交互的情况下执行更长时间的运行操作,或提供供其他应用程序使用的功能

它本身并不是一种完成主线程工作的方法

最终,当安卓决定是否保留你的应用程序时,它并不关心你正在运行的线程数、尚未完成的
倒计时程序数、你在队列中等待的
可运行程序数,等等。它关心您是否有任何活动的应用程序组件。
活动是否可见?太好了,留下来。
服务是否已启动?也很好。以上都没有?也许是时候终止应用程序了

因此,这也回答了一个问题,“我应该在什么时候使用服务来做后台工作?”正如前面提到的,服务不会为你做这些工作,它只会帮助你保持活力。您可以尝试在
广播接收器中启动一个线程(请注意),但一旦从
onReceive()
返回,您的应用程序很可能会被终止,除非您的服务也在运行

附加的奥利奥后注意事项

请注意,
服务
可能只会在应用程序离开前台后帮助应用程序保持“几分钟”的活动状态()。我所知道的解决这个问题的唯一方法是通过将
服务
变成“前台服务”回到前台

此外,如果您需要确保设备在工作完成之前保持唤醒状态,则需要在前台安装一个组件。也就是说,您仍然可以在“后台”(即“屏幕外”)中完成这项工作,但您需要一个“前台服务”(操作栏中的图标)。否则,将应用Doze,这会抑制应用程序正在使用的任何
WakeLocks