Joh*_* M. 3 android android-service
对于定期后台任务,我看到JobScheduler经常使用.另外,还有就是也JobService和AlarmManager对轻微(?)不同的使用情况.但为什么不开始新的Runnable?使用Runnable后台任务的缺点是什么?Runnable闲置时是否会使用更多资源?
sat*_*ine 13
Runnable是一个接口,除了提供一个名为的方法之外,它本身不执行任何操作run.也许你想知道如何HandlerThread,Thread,AsyncTask,ExecutorService使用VS JobScheduler,IntentService和AlarmManager?
这是一个Android线程备忘单:
Runnable:一个接口,它本身不做任何事情,但在与许多其他线程相关的类进行交互时使用Thread:从进程的主线程运行代码的最基本的方法.AsyncTask:基于Android的中心方式从主线程运行代码,有一个专用于所有AsyncTask实例的线程,因此在您的进程中一次只能运行一个HandlerThread:在主线程和另一个线程之间发送消息(可能有延迟)的便捷方式ExecutorService:强大的线程池,允许您利用多个CPU核心Service (Android):一个没有用户界面但其方法仍然在主线程上运行的android组件IntentService:你可以扩展的一个android服务子类,它包含一个后台线程,在该线程上可以完成没有相关Activity的工作AlarmManager:Android系统提供的一种机制,用于在特定时间启动Android组件,但在重启时会忘记所有内容JobScheduler:Android系统提供的Lollipop及以上机制,根据要完成的工作的描述启动Android服务,并且可以选择在重新启动时保留配置(现在更喜欢WorkManager)WorkManager:Android架构组件(由Google提供,在许多Android版本上运行的库),其工作方式与JobScheduler类似,但还允许协调多个作业Android OS如何管理进程和线程:
在选择线程机制时,了解Android OS如何管理应用程序非常重要.而Android OS看到应用程序中的应用程序和组件(Activity,Service,BroadcastReciever和ContentProvider).高级Android操作系统不知道应用程序内部的线程.
与台式计算机上的应用程序不同,Android OS中安装的应用程序进程具有更加模糊的生命周期.例如,如果你启动计算器app,Android会为它创建一个linux进程.如果你离开计算器,它通常不会立即杀死计算器进程.如果您开始使用许多其他应用程序并且长时间不返回计算器,它最终可能会决定回收计算器进程使用的内存并结束该进程.即使进程存在,用户也可能让手机进入休眠状态,CPU将停止执行所有进程中的所有线程,直到CPU再次唤醒为止.唤醒锁可以防止CPU睡眠.诸如WorkManager可以为您处理唤醒锁的机制.
这在实践中意味着你可以从Activity他们拥有自己生命的线程中剥离线程,只要进程处于活动状态,线程就不会被Android操作系统暂停或停止,即使Activity可能正在接收这些生命周期回调.但是,当Android决定结束您的进程时,所有线程也会死亡.作为应用程序开发人员通知Android它不应该杀死你的进程的唯一方法是创建一个Service甚至可能使它成为前景,Service以便Android知道你的应用程序中正在发生的重要事情,或者WorkManager因为Android知道(在引擎盖下它可能是Service...).当Service你使用a时,你仍然需要分离某种线程来完成你的工作,因为Service函数在你的进程的主线程上执行,除非你通过IPC绑定器调用接收消息,那些运行在16个绑定线程的池上,这同样适用ContentProvider方法,如果他们是通过工控机,而不是在本地调用.
以下是一些问题,可帮助您确定使用方法:
考虑HandlerThread,AsyncTask或ExecutorService
考虑Service与a HandlerThread或类似的东西配对.
考虑WorkManager,或AlarmManager与IntentService
考虑 WorkManager
一如既往,最好直接从源头获取此类信息.例如https://developer.android.com/topic/libraries/architecture/workmanager Google说:
注意:WorkManager适用于需要保证系统即使应用程序退出也会运行它们的任务,例如将应用程序数据上传到服务器.如果应用程序进程消失,它不适用于可以安全终止的进程内后台工作; 对于这种情况,我们建议使用ThreadPools.
有关这方面的更多提示,请阅读https://developer.android.com/上的javadoc和指南
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |