Android系统原理|【Android P】 JobScheduler服务源码解析(三)—— 使用Job需要注意的点
Android Job 服务在系统中算是一个比较轻量级的服务,但是推出后,被很多应用运用进去了
前面两篇主要是解析Job 是怎么使用的。并且其原理如何。本篇着重于应用调试,这里会对自己使用Job 中遇到的坑,以及小技巧分享一下
调试知识扩展
adb shell cmd jobscheduler run -f -u 0 com.google.android.apps.turbo 106
// 强制执行google turbo 包下的JobID 为106的Job
adb shell cmd jobscheduler get-job-state -u 0 com.google.android.apps.turbo 106
//获取当前turbo jobID 为106 状态
adb shell cmd jobscheduler // 终端操作帮助文档
adb shell dumpsys jobscheduler pkgname // 查看当前包下面所有的job信息以及状态
adb shell dumpsys jobscheduler package com.android.phone // 查看com.android.phone 包下所有的job信息
Job使用注意点
- IllegalArgumentException: You’re trying to build a job with no constraints, this is not allowed.
K:job必须要指定一个限制条件,如setMinimumLatency()
- 【Android系统原理|【Android P】 JobScheduler服务源码解析(三)—— 使用Job需要注意的点】StrictModeException or ANR
K: JobService 是直接继承Service,和IntentService不一样,Jobservice 运行在主线程,如果访问网络等耗时操作会报异常或ANR
- 使用CancelAll会把同一UID下的所有job全部cancel
K: JobSchedulerService.this.cancelJobsForUid(uid, reason);
- JobService 服务启动不了?
K:1. 同一个UID下,当两个JobService对应的jobId相同时, 先注册的任务会被后注册的任务覆盖掉, 只会执行后注册的任务, 先注册的任务被取消了
2. 如果JobService执行在独立的进程, 此时应用需要自启动权限, 相应的任务才会执行(针对于各个厂商对自启动App管控策略有关)
推荐阅读
- android第三方框架(五)ButterKnife
- 做一件事情的基本原理是什么()
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 【读书笔记】贝叶斯原理
- 单点登陆
- android|android studio中ndk的使用
- 操作系统|[译]从内部了解现代浏览器(1)
- 游乐园系统,助力游乐园管理