美文网首页
电量优化(四)JobSchedule

电量优化(四)JobSchedule

作者: 贾里 | 来源:发表于2019-02-12 10:58 被阅读4次

手机消耗电脑的顺序:屏幕、蜂窝网络、wifi、GPS

将很多次网络访问,几集中在一个时间段内访问,就会减少电量的消耗;也会减少CPU的启动次数;
有大量的网络访问放在JobScheduler中处理;

JobSchedule的使用
JobSchedule简单使用,可以放在服务中处理,参考官方demo

 public void execut(View view) {
        wakelock_text.setText("正在下载....");
//        for (int i = 0; i < 500; i++) {
//            mWakelock.acquire();//唤醒CPU
//            wakelock_text.append(i+"连接中……");
////            wakelock_text.append("");
//            //下载
//            if (isNetWorkConnected()) {
//                new SimpleDownloadTask().execute();
//            } else {
//                wakelock_text.append("没有网络连接。");
//            }
//        }

        //优化
        JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
        for (int i = 0; i < 500; i++) {
            JobInfo jobInfo = new JobInfo.Builder(i,serviceComponent)
                    .setMinimumLatency(5000)//5秒 最小延时、
                    .setOverrideDeadline(60000)//maximum最多执行时间
//                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)//免费的网络---wifi 蓝牙 USB
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)//任意网络---
            /**
             设置重试/退避策略,当一个任务调度失败的时候执行什么样的测量采取重试。
             initialBackoffMillis:第一次尝试重试的等待时间间隔ms
             *backoffPolicy:对应的退避策略。比如等待的间隔呈指数增长。
             */
//                    .setBackoffCriteria(long initialBackoffMillis, int backoffPolicy)
                    .setBackoffCriteria(JobInfo.MAX_BACKOFF_DELAY_MILLIS, JobInfo.BACKOFF_POLICY_LINEAR)
//                    .setPeriodic (long intervalMillis)//设置执行周期,每隔一段时间间隔任务最多可以执行一次。
//                    .setPeriodic(long intervalMillis,long flexMillis)//在周期执行的末端有一个flexMiliis长度的窗口期,任务就可以在这个窗口期执行。
                    //设置设备重启后,这个任务是否还要保留。需要权限:RECEIVE_BOOT_COMPLETED //ctrl+shift+y/u x
//                    .setPersisted(boolean isPersisted);
//                    .setRequiresCharging(boolean )//是否需要充电
//                    .setRequiresDeviceIdle(boolean)//是否需要等设备出于空闲状态的时候
//                    .addTriggerContentUri(uri)//监听uri对应的数据发生改变,就会触发任务的执行。
//                    .setTriggerContentMaxDelay(long duration)//设置Content发生变化一直到任务被执行中间的最大延迟时间
                    //设置Content发生变化一直到任务被执行中间的延迟。如果在这个延迟时间内content发生了改变,延迟时间会重写计算。
//                    .setTriggerContentUpdateDelay(long durationMilimms)
                    .BUILD();


            jobScheduler.schedule(jobInfo);
        }

    }

在国外统一使用GCM,就会耗电少一点,在国内,不同的应用用自己的服务,导致耗电很高。
Doze优化,会尽量限制应用长时间未休眠

5.0API以后用的JobScheduler
5.0API之前用GCM---谷歌的Google Play ServiceManager,国内基本是废的。(里面有很多的网络优化的代码--包括访问策略等)

JobScheduler是系统级别的,通过调用系统服务(AIDL)的方法
JobScgeduler源码分析

  • JobInfo
  • JobScheduler
  • JobService
进程1
MyService{
    MyBinder extends MyInterface.Stub{
        a(){
        //
        }
    }
}

MyInterface.aidl{
    接口方法a();
}

进程2
MyInterface.aidl{
    接口方法a();
}

bindService(service,new ServiceConnection(){
    onServiceConnected(IBinder binder){
        //建立连接
        MyInterface interface = binder.asInterface();

    }
})

interface.a();

Zygote进程--Linux核心
启动系统进程SystemServer,开启一些列的关键服务:AMS/PMS/WMS/JobSchedulerService
/data/system/job/jobs.xml文件---永久的任务。

相关文章

  • 电量优化(四)JobSchedule

    手机消耗电脑的顺序:屏幕、蜂窝网络、wifi、GPS 将很多次网络访问,几集中在一个时间段内访问,就会减少电量的消...

  • 网络优化(一)缓存优化

    除了上面的JobSchedule的网络时机请求的网络优化还有其他优化。 1.请求的缓存。Http请求是可以做缓存的...

  • Android M 以上 电量优化分析

    电量优化一直是Android 开发中的头等问题。本篇将分析一下Android M 以上电量优化措施电量优化相关的部...

  • APP开发实战125-APP 电量优化

    30.5电量优化 1 网络流量优化,预置资源优化、代码优化和UI性能优化可以有效降低电量消耗。 2 使用定位功能时...

  • APP性能优化

    电量检测和优化 耗电量查看:设置-电池-应用耗电量 电量优化:CPU减少应用对数据的处理,尽可能放在服务端处理设置...

  • 电量优化

    文章来源:http://wuxiaolong.me/2017/04/27/AndroidBattery/我们可以获...

  • 电量优化

    1, 分析电量的工具Android 5.0及以上的设备, 允许我们通过[adb命令dump出电量使用统计信息.ad...

  • 电量优化

    1.为了省电,有些工作可以当手机插上电源的时候去处理。 像这些不需要及时地和用户交互的操作可以放到后面处理。比如:...

  • 电量优化

    1、在android framework里面有专门负责电量统计的Service:BatteryStatsSeriv...

  • 电量优化

网友评论

      本文标题:电量优化(四)JobSchedule

      本文链接:https://www.haomeiwen.com/subject/mbyheqtx.html