广播

来源:互联网 发布:ssohandler java 编辑:程序博客网 时间:2024/05/16 16:27
一、什么是广播
①Android四大组件之一
②一种全局的监听器,用于监听系统全局的广播消息
③系统大部分消息都以广播的形式发布,比如开机启动完成的消息。收到短信的消息,打进打出电话的消息
例如:
Android系统每次启动完成会向外广播一条信息,告诉所有人启动完成了,只有继承自Broadcast的类能捕捉到这些系统消息,捕捉到信息该如何就如何


二、如何实现自定义广播?
1.我们拿广播电台来做个比方许许多多不你们同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了


2.创建广播发送者:①创建Intent用于启动Broadcast:intent.setAction(String action)指定广播的频率
intent.put(String key,String message)指定广播发送出去的消息
 ②调用sendBroadcast()或Intent的Broadcast方法启动指定的广播类,当发出Broadcast Intent以后,所有匹配该Intent的Broadcast的可能被启动
3.创建广播接收者:①:写一个类继承自BroadcastReceiver
 ②:重与onReceive(Context context,Intent intent)方法
 ③:注册广播接收者。
<1>静态注册:在清单文件中注册(1)在<application>节点中添加一个<receiver>节点
(2)添加android:name属性  值为类的全路径
(3)添加<intent-filter>节点 指定<action>节点,相当于是指定接收的广播的频率
广播接收器的执行不依赖于本应用程序的运行
<2>动态注册:在应用程序被启动执行时注册,相对应应用程序如果退出,广播的注册必须要取消
 注册 context.registerReceiver(reciever,filter);
 取消注册 context.unregisterReceiver(reciever);


3.
(1)有序广播:
普通广播不能中断,所有监听这个广播的都能收到信息。有序广播可以中断。中断广播的传播:abortBroadcast();
(2)优缺点:优点:①按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver
②通过abortBroadcast可终止广播的传播
   缺点:效率低


优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中


4.粘性广播:
(1)粘性广播主要为了解决,在发送完广播之后,动态注册的接收者,也能够收到广播。
(2)例如:先发送一 广播,我的接收者是通过程序中的某个按钮动态注册的。如果不是粘性广播,我注册完接收者肯定无法收到广播了。这是通过发送粘性广播就能够在我动态注册接收者后也能收到广播。
(3)发送粘性广播还需要发送粘性广播的权限:<uses-permission android:name="android.permission.BROADCAST_STICKY"/>


5.生命周期:广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁


6.注意事项:
①广播接收器的执行和Activity以及Service的执行一样都是由Android的Main主线程负责的
②所以为了避免对主线程的UI绘制工作产生严重干扰,广播的onReceive方法中不能做非常复杂的操作
③因为这个方法的执行时间被限定到了10秒之内,否则就会报ANR(Application Not Response)异常

















原创粉丝点击