gpt4 book ai didi

android - Job Scheduler vs Runnable:下行?

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:24 25 4
gpt4 key购买 nike

对于周期性的后台任务,我发现经常使用JobScheduler。或者,也有JobServiceAlarmManager表示轻微的(?)不同的用例。但是,为什么不推出一个新的Runnable?在后台任务中使用Runnable有什么缺点?Runnable空闲时是否使用更多资源?

最佳答案

Runnable是一个接口,除了提供一个名为run的方法之外,它本身什么也不做。也许您想知道如何使用HandlerThreadThreadAsyncTaskExecutorServiceJobSchedulerIntentServiceAlarmManager
这是一个安卓线程手册:
Runnable:一个接口,它本身什么也不做,但在与许多其他线程相关类交互时使用
Thread:从进程的主线程运行代码的最基本的方法。
AsyncTask:基本的以android为中心的方式在主线程上运行代码,有一个线程专门用于所有异步任务实例,因此在您的进程中一次只能运行一个
HandlerThread:在主线程和另一个线程之间发送消息的便捷方式(可能有延迟)
ExecutorService:强大的线程池,允许您利用多个CPU核心
Service(android):没有用户界面但其方法仍在主线程上运行的android组件。
IntentService:您可以扩展的android服务子类,它包含一个后台线程,在该线程上可以执行无关联活动的工作。
AlarmManager:android系统提供的一种机制,用于在特定时间启动android组件,但在重新启动时会忘记所有内容
JobScheduler:android系统提供的一种棒棒糖及以上机制,用于根据对要完成的工作的描述启动android服务,并且可以选择在重新启动时保留配置(现在首选workmanager)
WorkManager:一个android体系结构组件(由google提供的库,运行在android的许多版本上),其工作方式类似于jobscheduler,但还允许多个作业进行协调。
Android操作系统如何管理进程和线程:
在选择线程机制时,了解android操作系统如何管理应用程序是很重要的。android操作系统可以看到应用程序中的应用程序和组件(ActivityServiceBroadcastRecieverContentProvider)。高级android操作系统不知道应用程序中的线程。
与桌面计算机上的应用程序不同,android操作系统中安装的应用程序进程具有更模糊的生命周期。例如,如果启动计算器应用程序,android会为它创建一个linux进程。如果离开计算器,通常不会立即终止计算器进程。如果您开始使用许多其他应用程序,并且长时间不返回计算器,它可能最终决定回收计算器进程使用的内存并结束该进程。即使进程存在,用户也可能让手机进入睡眠状态,CPU将停止所有进程中所有线程的执行,直到CPU再次唤醒。唤醒锁可以防止CPU睡眠。像WorkManager这样的机制可以为您处理唤醒锁。
这在实践中意味着,您可以从Activity中剥离线程它们有自己的生命周期,只要进程是活动的,线程就可以继续,即使Activity可能正在接收这些生命周期回调,android操作系统也不会暂停或停止线程。然而,当android决定结束你的进程时,你的所有线程也都会死掉。作为一个应用程序开发人员,告诉android它不应该终止你的进程的唯一方法是创建一个Service,甚至可能使它成为一个前台Service,这样android就知道你的应用程序中发生了一些重要的事情,或者使用WorkManager,因为android已经意识到了这一点(在幕后,它可能是A < cc>……当使用Service时,您仍然需要剥离某种类型的线程来完成您的工作,因为Service函数在进程的主线程上执行,除非您通过IPC绑定器调用接收消息,否则这些调用在16个绑定器线程池上运行,如果调用Service方法,则同样适用通过IPC而不是本地进行编辑。
这里有几个问题可以帮助您决定使用什么:
您是否正在执行一项任务,该任务直接与用户当前在屏幕上视觉交互的活动相关?
考虑ContentProviderHandlerThreadAsyncTask
您是在后台播放音乐,还是用户希望通过通知控制其他内容?
考虑将ExecutorServiceService或类似的东西配对。
你是在执行一项迟早会发生的任务,但与现在屏幕上发生的事情没有直接关系吗?
考虑HandlerThread,或WorkManagerAlarmManager
如果用户在任务即将启动时关闭了其设备,是否要在设备重新打开时重试?
考虑IntentService
像往常一样,最好直接从源头获取此类信息。例如,谷歌说:
注意:WorkManager用于需要保证
即使应用程序退出,系统也会运行它们,例如上载应用程序
数据到服务器。它不用于进程中的后台工作
如果应用程序进程停止,则可以安全地终止;因为
在这种情况下,我们建议使用线程池。
有关更多类似的提示,请阅读https://developer.android.com/topic/libraries/architecture/workmanager上的javadocs和指南。

关于android - Job Scheduler vs Runnable:下行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com