电量优化套路总结

101 阅读1分钟

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());
    }
}