赞
踩
7.将BroadcastFilter对象添加到ReceiverList对象中。
8.将Broadcast对象添加到IntentResolver对象中。
AMS收到广播时,从IntentResolver对象中找到对应的广播接收者。
============================================================================
广播分为无序广播、有序广播和粘性广播。发送无序广播需要调用sendBroadcast方法,该方法在ContextWrapper.java中实现。
调用Context对象的sendBroadcast方法。
该Context对象为启动ActivityThread时调用createBaseContextForActivity方法返回的ContextImpl对象。
1.调用ActivityManager的getService方法,获取AMS的代理IActivityManager对象。
2.调用AMS对象的broadcastIntent方法。
1.调用verifyBroadcastLocked方法,验证广播是否合法。
1).验证In.tent对象不为null,且有文件描述符,否则抛出IllegalArgumentException异常。
2).调用Intent对象的getFlags方法,获取Intent对象类型为int的标志。
3).若该标志设置了FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT,则不做处理。
该标志含义为启动检查只接受动态注册的广播接收者。
4).否则若标志没有设置FLAG_ RECEIVER_REGISTERED_ONLY,则抛出IllegalStateException异常。
该标志含义为只接受动态注册的广播接收者。
Android系统为了保护系统的安全,发送广播的Intent必须加上以上两个标志中的一个。
监听Android重要系统广播必须采用动态注册,防止病毒软件的自启动。
2.调用broadcastIntentLocked方法。
1.将静态注册的广播接收者和动态注册的广播接收者按照优先级高低存储在不同的列表中,再将列表合并。
2.创建BroadcastRecord对象。
3.调用BroadcastQueue对象的scheduleBroadcastsLocked方法。
调用BroadcastHandler对象的sendMessage方法,发送BROADCAST_INTENT_MSG消息。
消息在BroadcastQueue.java中BroadcastHandler类的handleMessage方法中得到处理。
调用processNextBroadcast方法。
该方法对有序广播和无序广播分别处理。
1.通过循环调用无序广播列表的remove方法,依次移除并获取其中的BroadcastRecord对象。
2.依次调用deliverToRegisteredReceiverLocked方法,把BroadcastRecord对象描述的广播发送给对应的广播接收者。
调用performReceiveLocked方法。
若广播接收者所在的应用程序进程存在且正在运行,则调用广播接收者所在的应用程序进程的ApplicationThread对象的scheduleRegisteredReceiver方法。
调用IIntentReceiver对象的performReceive方法。
IIntentReceiver用于广播的跨进程通信,具体实现为LoadedApk.ReceiverDispatcher.InnerReceiver。
调用ReceiverDispatcher对象的performReceive方法。
1.创建Args对象,将广播的信息封装成Args对象。
2.调用Args对象的getRunnable方法获取Runnable对象作为参数,调用Handler对象的post方法。
将BroadcastReceiver对象的onReceive方法封装到Runnable对象中。
跳槽季整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。