CPU时间片
获取运行过程线程CPU消耗,定位CPU占有率异常丰富
减少后台应用的主动运行
网络相关
请求时机及次数控制
数据压缩,减少时间
禁止使用轮询功能
定位相关
根据场景谨慎定位模式
考虑网络定位代替GPS
使用后务必及时关闭,减少更新频率
WakeLock相关
注意成对出现:acquire与release
使用带参数的acquire public void acquire(long timeout)
finally确保一定会被释放
// 一些逻辑
try{
}catch (Exception e){
}finally {
// 为了演示正确的使用方式
if(sWakeLock != null && sWakeLock.isHeld()){
sWakeLock.release();
sWakeLock = null;
}
}
常亮场景使用keepScreenOn即可
JobScheduler
在符合某些条件时创建执行在后台的任务
把不紧急的任务放到更合适的时机批量处理
package com.optimize.performance.net;
import android.app.job.JobParameters;
import android.app.job.JobService;
public class JobSchedulerService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// 此处执行在主线程
// 模拟一些处理:批量网络请求,APM日志上报
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
}
AndroidManifest.xml中注册JobSchedulerService
<service android:name=".net.JobSchedulerService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
/**
* 演示JobScheduler的使用
*/
private void startJobScheduler() {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(getPackageName(), JobSchedulerService.class.getName()));
builder.setRequiresCharging(true)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);//设备充电并且在wifi网络下才执行该job
jobScheduler.schedule(builder.build());
}
}