在Android应用开发中,或多或少的会有后台任务的需求,根据需求场景的不同,Android为后台任务提供了多种不同的解决方案,如Service、Loader、JobScheduler和AlarmManger等。后台任务通常用在不需要用户感知的功能,并且后台任务执行完成后需要即时关闭任务回收资源,如果没有合理的使用这些API就会造成电量的大量消耗。为了解决Android电量大量消耗的问题,Android官方做了各种优化尝试,从Doze到app Standby,通过添加各种限制和管理应用程序进程来包装应用程序不会大量的消耗电量。
为了解决Android耗电的问题,Android提供了WorkManager ,用来对应用中那些不需要及时完成的任务提供一个统一的解决方案,借助WorkManager,开发者可以轻松调度那些即使在退出应用或重启设备时仍应运行的可延期异步任务。WorkManager是一套AP,用来替换先前的 Android 后台调度 API(包括 FirebaseJobDispatcher、GcmNetworkManager 和 JobScheduler)等组件。WorkManager需要API级别为14,同时可保证电池续航时间。
WorkManager的兼容性体现在能够根据系统版本,选择不同的方案来实现,在API低于23时,采用AlarmManager+Broadcast Receiver,高于23时采用JobScheduler。但无论采用哪种方式,任务最终都是交由Executor来执行。下图展示了WorkManager底层作业调度服务的运作流程。