Android 后台任务处理指南

0x00 后台任务处理指南

Android的主线程(MainThread)主要是处理UI和绘制,接收用户的交互以及处理生命周期等事件。在UI线程中处理耗时操作,将严重影响用户的体验。因此很多任务是需要放在后台任务中进行处理的。

当需要后台任务时需要考虑以下因素:

目前Android系统中处理后台任务的方式有以下几种:

ThreadPools

当一个任务必须在App处于前台状态时处理,可以使用ThreadPools。如果要响应操作系统的触发事件状态,那么只能通过Broadcast Receiver了。

Foregound Services

对于必须执行完成的,并需要马上执行的任务,可以使用Foreground Services。前台服务会在通知栏中保持一个无法手动取消的通知,它会告诉操作系统这个任务非常重要,不要杀掉。

WorkManager

对于必须执行完成的,并能否延迟执行的任务,可以使用WorkManager。任务管理器是一个Android库,它优雅地实现了可延迟任务的执行,它还能够响应操作系统的触发事件(网络状态、电量变化等事件)。Android 6.0以上操作系统 WorkManager使用了框架层中的JobScheduler,用于优化电量消耗和批量任务的执行。在低于Android 6.0 (API 23) 的系统,如果项目有引用Firebase相关依赖库的话, WorkManager 则会使用Firebase JobDispatcher ,否则WorkManager 使用AlarmManager来优雅地处理后台任务。

因此WorkManager 其实是封装了JobSchedulerFirebase JobDispatcherAlarmManager 的调用逻辑。它能够以最优的方式选择处理后台任务的方式,这也是google目前推荐处理后台任务的一种方式。

后台任务处理的限制

为了延长电量使用,在 App 处于后台不可见得情况下 Android 限制了后台任务的执行情况。

WorkManager 是处理以上限制的最好工具。

0x01 参考文档

https://developer.android.com/guide/background


Powered by Jekyll and Theme by solid