1.1 广播分类
1.1.1标准广播
效率要更高些 几个接收器可以同时收到某一条广播
1.1.2 有序广播
同一时刻只有一个广播接收器可以接收到一条静态广播 当前面的接收器截断广播时 后面的接收器就无法接收到这条广播了
1.2 接收系统广播
1.2.1 注册广播
接收广播必要的步骤就是对广播接收器注册广播
广播分为静态注册和动态注册
- 区别和联系
动态注册优先于静态注册接收到广播
动态注册只有在应用运行的情况下才能接收到广播 而静态注册在应用没有运行时也可以接收到广播
- 静态注册
静态注册就是在Manifest里进行注册 Android 8之后 在后台运行的应用对后台服务的访问受到限制 然后上课的时候学长说几乎等于凉凉? 然后我就没怎么去看静态注册了:)
- 动态注册
动态注册就是在代码里通过context.registerReceiver()
进行注册 需要注意的是动态注册的广播在不用的时候必须要取消注册
1.2.2 接收广播
每当接收到广播onReceive()
就会被调用一次 这里需要注意的是在onReceive()
中不能创建子线程 也不要写太多逻辑操作和进行耗时操作 当onReceive()
方法运行超过10s就会ANR
设置广播接收器的接收顺序 :当几个广播接收器都要对一条有序广播进行接收时设置广播接收器的接收顺序就很重要了 思路也很简单在相应的的地方添加权限就好了 权限越大越早接收
静态注册:
复制代码
动态注册:
IntentFilter filter = new IntentFilter(); filter.addAction(ACTION); filter.setPriority(权限数字);复制代码
拦截广播是只有在接收有序广播时才会出现的情况 我们通过abortBroadcast()
方法即可拦截某条我们想要拦截的广播
1.3 发送自定义广播
1.3.1 发送有序广播
发送广播不难 通过sendOrderedBroadcast()
方法即可发送一条有序广播
1.3.2 发送标准广播
同理 通过sendBroadcast()
方法即可发送一条标准广播
1.4 使用本地广播
之前我们发出的广播手机上所有的应用都可以接收到 这样可能就会有一定的安全问题 为了让我们发出的广播只有当前应用可以接收到 这里引出了本地广播的概念
本地广播的发送和接收和全局广播几乎没有什么区别 主要在于要用LocalBroadcastManager
和LocalReceiver
这两个类来进行操作
1.5 关于源码
可能还是因为太菜的缘故吧 看源码还是好难受