广播
介绍:
1.是个全局监听器,用于监听系统全局的广播消息
2.servise通常都是用广播来启动
3.系统大部分消息都以广播的形式发布,比如开机启动,收到短信,打进和打出电话的消息
4.安卓系统每次启动完成会向外广播一条消息,告诉所有人 启动完成,他不在乎谁接受广播,他会调到某个频道,
谁调到这个频道谁就能获取消息,只有继承broadcast类才能捕获到消息。广播的接受方和发送方可以是两个不同
的应用程序。
广播分为发送者和接受者
广播的发送方:
1.发送方式有两种,一种是有序广播,一种是无序广播
2.广播接受者不能停止发送者发送广播,如果想要允许接受者得到结果或者终止广播发送者就必须发送一个有序广播。有序广播:
广播发送者发送:
发送者相当于一个广播电台,一个广播电台第一件事是确定一个频率,这样听众才能准确找到该广播,
intent.setAction("android.intent.action.MyNameBroadcast");方法就是用来设定这个频率的。
public void clickBtn(View view)
{
String name=""+nameTxt.getText();
Intent intent=new Intent();
//action可以作为广播的频率识别
intent.setAction("android.intent.action.MyNameBroadcast");
intent.putExtra("name", name);
//通过intent发送普通广播
this.sendBroadcast(intent);
}
广播接受者:(分为静态广播和动态广播)
静态广播:
1.编写好广播接收者(就是继承了broadcastrecvie的类),之后还要在清单文件注册
2.这里的广播接收器在Manifest.xml文件中注册 。
<receiverandroid:name="veryedu.lession12.broadcast.receiver.MyNameBroadcastReciever">
<intent-filter >
<action android:name="android.intent.action.MyNameBroadcast"/>
</intent-filter>
</receiver>
其中<action android:name="android.intent.action.MyNameBroadcast"/> 表示接受哪个频道。这里表示接 受action为android.intent.action.MyNameBroadcast这个频道
注意:广播接受期不依赖于本应用程序才执行。
广播接收器的执行和Activity以及Service的执行一样都是由Android的Main主线程负责的
所以为了避免对主线程的UI绘制工作产生严重干扰 广播的onReceive方法中不能做非常复杂的操作
因为这个方法的执行时间被限定到了10秒之内 否则就会报ANR(Application Not Response)异常
动态广播 :的注册是在应用程序被启动执行时注册的 ,相对应 应用程序如果退出 广播的注册必须要取消,注册 广播接收者的组件(如activity)一关闭,那么广播也停止接受。
protected void onCreate(Bundle savedInstanceState) {
reciever=new MyNameBroadcastReciever();
}
protected void onPause() {
//窗口一暂停就取消广播接收器的注册 否则如果应用程序退出而注册没有取消的话会报异常
this.unregisterReceiver(reciever);
super.onPause();
}
protected void onResume() {
// 窗口一出现就注册广播接收器
IntentFilter filter=new IntentFilter();
//设定广播接收器需要接听的频率
filter.addAction("android.intent.action.MyNameBroadcast2");
this.registerReceiver(reciever, filter);
super.onResume();
}