简单介绍:Android四大组件之一,本质上是一个全局的监听器,用来监听全局的广播信息,可以方便的实现系统的不同组件的通信。
流程分析:
首先要明确发送的信息,然后明确发送广播的地方,把过滤的信息和发送的信息都放入到intent的对象中,然后调用sendBroadcast方法,发送广播。
当广播发送出去后,已经注册的广播接受者就会检测自己的过滤信息,看是否符合条件,如果符合条件就接收信息,不符合就不接受。
定义:广播接收者可以接收某个频道(action)发来的广播,发送者可以是activity也可以是service
作用:
- 监听系统的广播,并且可以作出相应的处理
- 后台运行的服务在完成耗时操作后,比如网络下载文件,获取数据成功后,会通知activity更新
用法:
-
创建一个类,让这个类继承BroadCastReceiver
-
必须重写onReceive(Context context,Intent intent)方法
-
注册广播
-
静态注册:在清单文件中注册(全局)
<receiver android:name="全类名">
<intent-fileter>
<action android:name=""/>
</intent-fileter>
</receiver> -
动态注册
IntentFilter filter = new IntentFilter(); filter.setAction(""); context.registerReceiver(receiver,filter);
-
两者的区别:
当使用静态注册广播时,不管程序是否开启,否能够接受发送来的广播,静态注册每次有消息都会由系统new一个处理器,进行处理,然后销毁。
动态注册会比静态注册更加灵活,动态注册的广播如果没有执行unregisterReceiver方法去取消注册,合静态注册就差不多了,动态生成的广播接受者必须调用代码去销毁,每次处理消息也会生成新的处理器
广播的分类:
-
普通广播 :依次传递给各个接受者去处理:
发送广播的步骤:
Intent intent = new Intent();
intent.setAction("消息的描述");
// intent.putString("","");
context.sendBroadcast(intent); -
有序广播:这种广播的处理顺序是按照广播接受者的优先级进行排序的,高优先级就会优先接受到这条广播。
一般发送这种广播,高优先级的接受器会先接收到并且拦截广播,那么低优先级的接收者就接受不到了。 -
粘性广播:发送之后会一致存在于系统的消息容器当中,直到处理他的接受这出现为止。(api21过时)
发送粘性广播需要权限: BROADCAST_STICKY
发送粘性广播的方法: sendStickyBroadcast (Intent intent)
关于广播的注意事项 -
广播接受者的生命周期是非常短暂的,在接收到广播时被创建,在onReceive方法结束之后被销毁。
-
广播接收者中不要做耗时操作,等待时间超过10秒就会弹出Application Not Responding的错误对话框。
-
最好也不要在广播接收者中创建子线程,然后在子线程中做耗时操作,因为在广播接收者被销毁之后,就拿不到这个线程的引用了,那么子线程就会编程空线程,很容易会被系统杀死。
-
耗时操作在服务当中完成。
网友评论