Android省电的秘密(2)之adb解读JobScheduler

前言###

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

目录###

一.系统服务JobSchedulerService
二.注册的job记录文件jobs.xml
三.job参数解释

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

服务在SystemServer中注册,属于系统服务
源码路径:/frameworks/base/services/java/com/android/server/SystemServer.java

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

        readJobMapFromDisk(mJobSet);
    }

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

root@Xiaomi:/data/system/job # cat jobs.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<job-info version="0">
    <job jobid="137303610" package="com.google.android.apps.maps" class="com.google.android.apps.gmm.offline.OfflineAutoUpdateJobService" uid="10099">
        <constraints connectivity="true" idle="true" charging="true" />
        <periodic period="86400000" delay="1485554596322" />
        <extras />
    </job>
    <job jobid="137303609" package="com.google.android.apps.maps" class="com.google.android.apps.gmm.offline.OfflineAutoUpdateJobService" uid="10099">
        <constraints connectivity="true" idle="true" charging="true" />
        <one-off delay="1485444550825" />
        <extras />
    </job>
    <job jobid="1" package="com.example.wfcvs" class="com.example.wfcvs.wenfengService" uid="10146">
        <constraints charging="true" />
        <one-off delay="1485348887275" />
        <extras />
    </job>
    <job jobid="20537" package="android" class="com.android.server.backup.KeyValueBackupJob" uid="1000">
        <constraints connectivity="true" charging="true" />
        <one-off deadline="1485591350955" delay="1485519812187" />
        <extras />
    </job>
    <job jobid="808" package="android" class="com.android.server.MountServiceIdler" uid="1000">
        <constraints idle="true" charging="true" />
        <one-off delay="1485417599095" />
        <extras />
    </job>
</job-info>
三.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会被触发

例如:
<constraints connectivity="true" charging="true" /> 代表网络连接并且在充电状态下,job会被调度
<one-off delay="1485348887275" /> 代表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工具感受下吧!新年快乐!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容