时间来到2018年的当下,当我们讨论后台处理任务的时候,一般可能涉及的行为类型有下面一些类型,例如:
- 发送程序运行日志
- 上传图片和视频
- 同步数据
- 处理数据
这些行为都需要在后台进行操作,在Android平台上,我们可以利用如下的这些可选方式来实现后台任务:
那么到底我们如何做出合理的选择呢?过去的几年,Android系统随着版本的更新针对电量优化这一块做出了不同程度的限制优化,例如在Android M上的Doze Mode
,Android N上的Limit Implicit Broadcast
,Android O上的Background Service Limitations
以及最新的Android P上面的App Standby Buckets
。为了确保后台任务对电量的消耗影响足够小,对待后台任务的处理要更加的慎重小心。
0)Types of Background Work
通常来说,我们可以把所有的后台任务按照任务紧迫性(是马上需要执行的任务/还是可以缓期执行的任务)和任务重要性(是确保一定要被执行的任务/还是最好能够执行的任务)进行四象限的划分。通常来说对于非确保一定要执行的任务,无论时间是否紧迫,我们都可以使用ThreadPool来完成这个任务。对于那些比较重要的又时间紧迫的任务,我们一般会使用Foreground Service来完成这个操作。比较有有意思的是最后一个象限:那些希望确保可以被执行但是又可以接受延期执行的任务。这些任务可以使用JobScheduler/JobDispatcher/AlarmManager/BroadcastReceivers来完成。WorkManager也刚好是用来解决这一类的问题的。