正文
优化建议
开发过程中可以尝试通过调整任务优先级等策略来达到降低损耗的目的,使用
JobScheduler
是个不错的选择:
-
可以推迟的非面向用户的任务(如定期数据库数据更新);
-
当充电时才希望执行的工作(如备份数据);
-
需要访问网络或 Wi-Fi 连接的任务(如向服务器拉取配置数据);
-
零散任务合并到一个批次去定期运行;
-
当设备空闲时启动某些任务;
-
只有当条件得到满足, 系统才会启动计划中的任务(充电、WIFI...);
官方建议优化的一些方法
https://developer.android.google.cn/training/monitoring-device-state/index.html
对低电耗模式和应用待机模式进行针对性优化
https://developer.android.google.cn/training/monitoring-device-state/doze-standby.html
Android 7.0新特性对电池管理进一步加强,一些新的变化可能多对我们现有的业务会造成影响需关注
https://developer.android.google.cn/about/versions/nougat/android-7.0-changes.html#perf
JobScheduler
自 Android 5.0 发布以来,JobScheduler 已成为执行后台工作的首选方式,其工作方式有利于用户。应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。JobSchedule的宗旨就是把一些不是特别紧急的任务放到更合适的时机批量处理。这样做有两个好处:
JobScheduler的简单使用,首先自定义一个Service类,继承自JobService
|
public class JobSchedulerService extends JobService{ private String TAG = JobSchedulerService.class.getSimpleName(); @Override
public boolean onStartJob(JobParameters jobParameters) {
Log.d(TAG, "onStartJob:" + jobParameters.getJobId()); if(true) {
new DownloadTask().execute(jobParameters); return true;
}else {
return false;
}
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.d(TAG, "onStopJob:" + jobParameters.getJobId());
return true;
} class DownloadTask extends AsyncTaskJobParameters, Object, Object> {
JobParameters mJobParameters; @Override
protected Object doInBackground(JobParameters... jobParameterses) {
mJobParameters = jobParameterses[0];
try {
Thread.sleep(30*1000);
} catch (InterruptedException e) {
e.printStackTrace();
} return null;
} @Override
protected void onPostExecute(Object o) { super.onPostExecute(o);
jobFinished(mJobParameters, false);
}
}
}
|