一、广播Broadcast
广播事件处理属于系统级的,可跨应用的事件处理。
一个应用可以注册对应的广播接收器BroadcastReceiver接收一个/多个广播,也可以发送广播Broadcast。
广播事件机制是应用程序(进程)间通信的一种手段。
在onReceive中进行耗时操作需要开启分线程来处理,不要在onReceive中直接做耗时处理。
二、相关API
Context
- sendBroadcast(Intent intent);:发送一般广播
- sendOrderedBroadcast(Intent intent);:发送有序广播
- registerReceiver(receiver,intentFilter);:动态注册广播接收器
- unRegisterReceiver(receiver);:解除广播接收器
BroadcastReceiver
onReceive(Context context , Intent intent):接收到广播时的回调。
//可以从Intent中获取广播所带的数据abortBroadcast():中断广播的继续传播
- boolean isOrderedBroadcast():判断是否为有序广播
常见的系统广播:http://blog.sina.com.cn/s/blog_7dbac1250101mt5h.html
(接收某些广播时,需要一定的权限)
(拦截某些广播时,需要较高的优先级priority来优先接收到广播)
三、广播接收器的两种注册方式
广播接收器的两种注册方式:静态注册和动态注册。不管注册方式如何,都要写一个广播接收器的子类,并在onReceive中进行接收到相关广播后的事务处理 。
在IntentFilter的action中说明监听的广播行为。
public class MyReceiver extends BroadcastReceiver{ public MyReceiver(){ Log.e("TAG","MyReceive"); } @Override public void onReceive(Context context,Intent intent){ Log.e("TAG","onReceive"); } }静态注册:在应用的AnroidManiFest中注册。
<receiver android:name="广播接收器子类的全类名"> <intent-filter android:priority="设置广播接收器的优先级(int值)"> <action android:name="所要接听的广播的action"/> <intent-filter> </receiver>动态注册:使用Java在代码中进行注册。
//动态注册: MyReceiver myReceiver = new MyReceiver(); //创建过滤器 IntentFilter filter = new IntentFilter("所要接听的广播的action"); //注册广播 registerReceiver(myReceiver,filter) //解除广播接收器,一般在onDestory中调用 this.unregisterReceiver(myReceiver); //动态注册的广播接收器只能为创建它的Activity/Service工作。 //当动态注册的广播接收器的宿主Activity/Service销毁时,要解除该广播接收器。否则会报错。动态注册 本地广播接收器(只在应用内传播的广播):LocalBroadcastManager
LocalBroadcastManager mLocalBroadcastManager; MyReceiver myReceiver; mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); myReceiver = new MyReceiver(); //创建过滤器 IntentFilter filter = new IntentFilter("所要接听的广播的action"); //注册广播接收器 mLocalBroadcastManager.registerReceiver(mReceiver, filter); //解除广播接收器,一般在onDestory中调用 mLocalBroadcastManager.unregisterReceiver(mReceiver);动态注册和静态注册的区别:
静态注册:
注册方法:配置文件
注册时间:应用安装成功/手机开机加载应用完成。注册时不会创建广播接收器对象,接收到广播时才创建。对象执行完onReceive后等待垃圾回收。收到广播后在创建新的对象。
生命结束的时间:应用卸载/对象等待垃圾回收,创建新的对象。
应用场景:需要监听整个应用的整个生命过程/其他应用
动态注册:
注册方式:Java代码
注册的时间:执行registerReceiver(receiver,filter)后,注册时就创建广播接收器对象。 接收广播时不会再创建对象。
生命结束的时间:执行unRegisterReceiver(receiver)。(注册广播接收器的宿主销毁后必须解除注册,解除注册后,对象等待被回收)
应用场景:只服务于某个Activity/Service
四、一般广播和有序广播
sendBroadcast(Intent intent);:发送一般广播
sendOrderedBroadcast(Intent intent);:发送有序广播
boolean isOrderedBroadcast():判断是否为有序广播(一般广播不可以中断)
区别两种广播:
可以在静态注册/动态注册中指定优先级priority,在广播接收器中调用abortBroadcast()来中断广播的继续传播。(priority最大值为2^31-1)
本文介绍了安卓开发中的广播Broadcast,包括广播的概念、相关API、广播接收器的静态与动态注册,以及一般广播和有序广播的区别。强调了在onReceive中处理耗时操作的注意事项,以及如何使用abortBroadcast()中断有序广播的传播。
1298

被折叠的 条评论
为什么被折叠?



