android schedule 参数,Android省电的秘密(2)之adb解读JobScheduler

前言###

adb是查看系统状态一个很好的工具,本文使用adb来解读JobScheduler的状态。JobScheduler是google为了省电而设计的一种用于调度工作的机制,为了查看JobScheduler的运行效果,除了实际观察运行状态外,adb也是一种很不错的辅助调试工具。

目录###

一.系统服务JobSchedulerService

二.注册的job记录文件jobs.xml

三.job参数解释

一.系统服务JobSchedulerService#####

mSystemServiceManager.startService(JobSchedulerService.class);

执行 adb shell service list查看系统服务,在列出的所有系统服务中可以找到

jobscheduler: [android.app.job.IJobScheduler]

二.注册的job记录文件jobs.xml#####

源码路径:/frameworks/base/services/core/java/com/android/server/job/JobStore.java

系统中的job记录在文件jobs.xml,完整路径是/data/system/job/jobs.xml,查看该文件手机要先root

private JobStore(Context context, File dataDir) {

mContext = context;

mDirtyOperations = 0;

File systemDir = new File(dataDir, "system");

File jobDir = new File(systemDir, "job");

jobDir.mkdirs();

mJobsFile = new AtomicFile(new File(jobDir, "jobs.xml"));

mJobSet = new ArraySet();

readJobMapFromDisk(mJobSet);

}

cat命令查看该文件,文件记录着系统中此刻所有被调度的job

root@Xiaomi:/data/system/job # cat jobs.xml

三.job参数解释#####

参数

解释

jobid

每个job的id,android.app.job.JobInfo.Builder.Builder(int jobId, ComponentName jobService) 指定

package

包名

class

job的类名,这个类继承于JobService

uid

应用uid

constraints

job被调度的条件

one-off

跟时间相关,记录job的deadline,和延时执行的时间,注意这个是时间点,由函数systemclock.elapsedrealtime()生成,即系统启动的时间,到这个时间点job会被触发

例如:

代表网络连接并且在充电状态下,job会被调度

代表job在满足条件的情况下,必须要等到1485348887275这个时间点才会被执行

jobs.xml文件需要手机root情况下才能查看,没有root要怎么查看呢?当然有方法,执行adb shell dumpsys jobscheduler

adb shell dumpsys jobscheduler

Started users: u0

Registered jobs:

117..:[ComponentInfo{com.google.android.apps.maps/com.google.android.apps.gmm.offline.OfflineAutoUpdateJobService},jId=137303610,u0,R=(-172:44:27,none),N=1,C=true,I=true,F=1,P=true,ANI=true]

148..:[ComponentInfo{com.google.android.apps.maps/com.google.android.apps.gmm.offline.OfflineAutoUpdateJobService},jId=137303609,u0,R=(-203:18:32,none),N=1,C=true,I=true,F=1,P=true,ANI=true]

849..:[ComponentInfo{com.example.wfcvs/com.example.wfcvs.wenfengService},jId=1,u0,R=(56:07,none),N=0,C=true,I=false,F=8,P=true,ANI=true]

246..:[ComponentInfo{android/com.android.server.MountServiceIdler},jId=808,u0,R=(-210:47:44,none),N=0,C=true,I=true,F=0,P=false,ANI=true]

Conn.

connected: true unmetered: true

148..: C=true, UM=false

117..: C=true, UM=false

Alarms (843148174)

Next delay alarm in 3367s

Next deadline alarm in 9223372036011627s

Tracking:

849..: (846515518, N/A)

Idle: false

3

246..

148..

117..

Batt.

Stable power: true

246885848,14863036,11761044,84957259

AppIdle

Parole On: false

android:idle=false, com.google.android.apps.maps:idle=false, com.google.android.apps.maps:idle=false, com.example.wfcvs:idle=false,

Pending:

Active jobs:

mReadyToRock=true

mDeviceIdleMode=false

例如

849..:[ComponentInfo{com.example.wfcvs/com.example.wfcvs.wenfengService},jId=1,u0,R=(56:07,none),N=0,C=true,I=false,F=8,P=true,ANI=true]

849 代表这个job的hashcode的前三位

R 代表延时时间和deadline,(56:07,none)代表延时到56:07才能执行,deadline为none代表没有deadline。

N 代表网络

C 代表充电

I 代表idle

F 代表调度失败的次数

P 代表job是否Persist

好了,伙伴们,使用你们的adb工具感受下吧!新年快乐!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值