首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 电量优化】JobScheduler 相关源码分析 ( ConnectivityController 底层源码分析 | 构造函数 | 追踪任务更新 | 注册接收者监听连接变化 )

schedule 方法底层调用 : 该方法最终调用的是 JobSchedulerService 中的 int schedule(JobInfo job, int uId) 方法 在 schedule...方法中调用了 scheduleAsPackage 方法 在 scheduleAsPackage 方法中调用了 startTrackingJob 方法 在 startTrackingJob 中 , 调用了每个...JobSchedulerService 中最终在 startTrackingJob 方法中 , 调用了 StateController 控制器的 maybeStartTrackingJobLocked..., null); 三、mConnectivityReceiver 广播接收者 ---- 在 mConnectivityReceiver 广播接收者中 , 接收到 ConnectivityManager.CONNECTIVITY_ACTION...ArrayList mTrackedJobs 集合中 mTrackedJobs.add(jobStatus); } } // 在构造函数中注册的广播接收者

29200
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    这样设计 Java 异常更优雅,赶紧学!

    ,那么就抛出空指针异常(它是RuntimeException的子类),调用者不用显示的进行try…catch…操作进行强制处理.这就要求调用者在调用这样的方法时先进行验证,避免发生RuntimeException...uid,Address address){ if(null !...= uid){ //进行处理.. } return null; } 上边的例子,如果只判断uid为空还好,如果再去判断address这个实体中的某些必要属性是否为空,在字段很多的情况下...上边的@Data是使用了一个叫做lombok的工具,它自动生成了Setter和Getter等方法,用起来非常方便,感兴趣的读者可以自行了解一下。...id不能为空,且此用户确实是存在的 Preconditions.checkNotNull(uid); User user = userDao.findOne(uid); if(null

    51420

    【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数的简略写法 )

    函数中进行初始化 ; val 只读类型变量 扩展属性 必须提供 getter 函数 ; var 可变类型变量 扩展属性 必须提供 getter 和 setter 函数 ; 代码示例 : 在该代码中 ,...; 注意下面的调用细节 : 如果定义的 扩展函数 是 为 非空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时使用 " ?....非空类型扩展函数 如果定义的 扩展函数 是为 可空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例...= abc, 接收者不为空 123abc this = null, string = abc, 接收者为空 abc 三、使用 infix 关键字修饰单个参数扩展函数的简略写法 ---- 如果 扩展函数...只有 一个参数 , 并且在 扩展函数 定义时 使用了 infix 关键字修饰 , 在调用该扩展函数时 , 可以省略 接收者与函数之间的点 和 参数列表的括号 ; 调用 使用 infix 关键字修饰 的

    1.9K30

    Kubernetes对象深入学习之五:TypeMeta无效之谜

    内容在控制台打印出来,现在咱们在黄色箭头前面添加两端代码 新增的代码是下面这些,先用现成的方法做一次提取,得到Kind和APIVersion,再尝试直接转换成objectruntime.Object...:亲自尝试强转 runtimeObj, _ := obj....:TypeMeta内容为空,接下来去寻找问题原因 问题原因 咱们按照顺序捋一下代码,在main.go中调用了CreateAndStartController来创建controller,此时指定了类型是...&v1.Pod{} 在CreateAndStartController方法内会调用NewListWatchFromClient来创建ListWatcher,指定了resource就是刚才传入的pods...关键代码是黄色箭头指出的部分:使用decoder对响应的body进行处理 再来看这个Decode方法的内容(apimachinery@v0.22.8/pkg/runtime/helper.go),很明显,这里故意调用了

    28180

    爬虫实践 | 玩转百度地图API,带你看遍全国公园。

    百度地图提供了丰富的api供开发者调用。我们可以免费获取各类地点的具体信息。...有一点注意的是,未认证(个人或企业)的情况下,每个账号一天最多只有2000次调用额,如果认证了,每个账号每天有10万次调用额。...下面尝试获取北京市的公园数据,并用json数据格式返回,代码如下: # coding=utf-8 import requests import json ''' 获取北京市的公园数据,并用json数据格式返回...共爬取了218941个公园信息,大概用了几分钟。 3.3 获取所有公园的详细信息 上面已经把所有城市的公园数据存储到city表中了。...最后,说一下百度地图api提供了相当丰富的资源数据,如房地产,旅馆,游乐园等等很多,有需要你们可以自己去尝试抓取。 ? - End -

    4.2K42

    【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | Android 源码在线网址推荐 )

    方法 五、JobSchedulerService 源码注释 上一篇博客 【Android 电量优化】电量优化 ( JobScheduler | JobService | AsyncTask ) 中使用了...最终调用到 int schedule(JobInfo job, int uId) 方法 , 该调用是跨进程调用的 ; int schedule(JobInfo job, int uId) 方法 是客户端的...参数代替原来的任务 ; 三、scheduleAsPackage 方法 ---- 在 int schedule(JobInfo job, int uId) 方法中 , 实际调用了 int scheduleAsPackage...包名 userId 用户 id ; 在上述 scheduleAsPackage 方法中 , 进行了一系列的状态判定 , 如包名不能为空 , 当前任务数量没有超过最大值 MAX_JOBS_PER_APP...return scheduleAsPackage(job, uId, null, -1, null); } // 实际调用的方法 , 传入 JobInfo job 任务信息 , uId

    42800

    请你挑战一下这几道nextTick面试题

    的时候会调用dep.depend(),在第57行的说明当调用set的时候会调用dep.notify()。...addDep的时候,实际上是传入的Dep对象把自己当做sub添加进去,这样在Dep对象调用notify才能通知到对应的Watcher,也就是说组件的data在调用set前一定要调用get才会通知对应的Watcher...,处理完后把has[id]置为null,最关键的一行是调用了watcher.run(),我们再看看watcher.run()做了什么。...这里虽然调用get方法了,但是Dep.target是undefined,所以也没有收集到依赖,毕竟在get方法中只有Dep.target不为空才去调用dep.depend()。..._render就会处理模板中的变量,那么模板中变量的get也就会被调用了,所以放在模板中的变量在会被收集依赖。

    11610

    四大组件的工作过程

    的应用程序进程信息,如果Service对应的app为空,则调用ActivityManagerService类的startProcessLocked方法来创建应用程序进程。...onBind生命周期方法调用后,又调用了AMS的publishService方法 源码路径:frameworks\base\core\java\android\app\ActivityThread.java...接着将动态注册的广播接收者和静态注册的广播接收者按照优先级高低不同存储在不同的列表中,再将这两个列表合并到receivers中,receivers中包含所有的广播接收者,创建BroadcastRecord...对象,将这些对象发送给对应的广播接收者,调用deliverToRegisteredReceiverLocked方法,其中做了检查广播发送者或广播接收者的权限,通过权限检查最终调用performReceiveLocked...extras, ordered, sticky, sendingUser); } } scheduleRegisteredReceiver方法中调用了

    14410

    浅入浅出 Android 安全:第四章 Android 框架层安全

    因此,由于系统中的每个应用具有其自己的 UID,所以该值可以用于识别调用方。 调用的接收者可以检查所获得的值并且决定是否应该完成事务。...接收者可以调用android.os.Binder.getCallingUid()和android.os.Binder.getCallingPid()[12]来获得发送者的 UID 和 PID。...Android 还提供了一组特殊调用,允许在运行时检查服务使用者是否已分配权限。 到目前为止所描述的权限模型提供了一种强化安全性的有效方法。 同时,这个模型是无效的,因为它认为所有的权限是相等的。...在第 24 行中,方法checkPermission被调用。 它接收uid和pid作为 Binder 框架提供的参数。...在第 4 行中它检查调用者 UID 是否拥有特权。 具有 root 和系统 UID 的组件由具有所有权限的系统授予。

    51810

    Android 安全之框架层安全(四)

    因此,由于系统中的每个应用具有其自己的 UID,所以该值可以用于识别调用方。 调用的接收者可以检查所获得的值并且决定是否应该完成事务。...接收者可以调用android.os.Binder.getCallingUid()和android.os.Binder.getCallingPid()[12]来获得发送者的 UID 和 PID。...Android 还提供了一组特殊调用,允许在运行时检查服务使用者是否已分配权限。 到目前为止所描述的权限模型提供了一种强化安全性的有效方法。 同时,这个模型是无效的,因为它认为所有的权限是相等的。...在第 24 行中,方法checkPermission被调用。 它接收uid和pid作为 Binder 框架提供的参数。...在第 4 行中它检查调用者 UID 是否拥有特权。 具有 root 和系统 UID 的组件由具有所有权限的系统授予。

    1.1K20

    jwt 小程序接口鉴权 【firebase 6.x】

    前言 ---- firebase/php-jwt 是一个非常简单的 JWT 库,用于在 PHP 中对 JSON Web令牌(JWT)进行编码和解码 packagist 上的下载次数更是达到了 1亿 以上...过期时间 ---- 在 \Firebase\JWT\JWT::decode() 方法中,可以发现以下代码 当 $payload 中有 exp  属性时,则判断 token 是否过期 当 $payload... function handle($request, \Closure $next){    // 因为构造方法优先于控制器中间件执行    // 如果 $request->uid 已存在,代表已在构造方法中获取了用户...empty($request->uid)) {        return $next($request);    }    // 执行到此代表请求头中的 token 为空    throw new \...JWT\Key;class JwtAuth{    // 访问密钥    const KEY = 'ed6a18a9a';    // 签发者    const ISS = 'liang';    // 接收者

    2.8K20

    Android深入四大组件(四)广播的注册、发送和接收过程

    在注释1处判断如果LoadedApk类型的mPackageInfo不等于null并且context不等null就调用注释2处的代码通过mPackageInfo的getReceiverDispatcher...回到registerReceiverInternal方法,在注释4处调用了ActivityManagerProxy(AMP)的registerReceiver方法,最终会调用AMS的registerReceiver...注释1处获取ReceiverList列表,如果为空则在注释2处创建,ReceiverList继承自ArrayList,用来存储广播接收者。...我们再回到broadcastIntent方法,在注释2处调用了broadcastIntentLocked方法,代码如下所示。...在handleMessage方法中调用了processNextBroadcast方法,processNextBroadcast方法对无序广播和有序广播分别进行处理,旨在将广播发送给广播接收者,下面给出processNextBroadcast

    84960
    领券