Android四大组件之BroadcastReceiver必备知识点
2018-02-06 15:40
537 查看
Android 广播分为两个角色:广播发送者、广播接收者
Android中的广播使用了设计模式中的观察者模式:基于消息的发布 / 订阅事件模型
注销:unregisterReceiver(receiver);
有序广播:sendOrderedBroadcast(intent, null);
在Intent-filter中添加一个android:priority=”8”属性,这个就是接收器优先级,数字越大的接收器,优先级越高,越先接到广播。
在一个接收器收到发来的Intent后,可以对其进行更改,对发送来的广播Intent进行修改是利用setResultExtras(bundle);
通过setResultExtras(bundle); 传递的数据是不会更改原生广播的数据的。也只是原来广播数据中额外添加的数据
可以使用abortBroadcast(); //终止消息再传递
Android中的广播使用了设计模式中的观察者模式:基于消息的发布 / 订阅事件模型
1.静态注册
1>注册方式:在AndroidManifest.xml里通过标签声明
<receiver //此广播接收者类是mBroadcastReceiver android:name=".MyBroadcastReceiver"> //用于接收网络状态改变时发出的广播 <intent-filter> <action android:name="android.intent.action.MY_BROADCAST"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
2>在Activity中调用:
Intent intent = new Intent(); intent.setAction("android.intent.action.MY_BROADCAST"); intent.putExtra("msg", "hello receiver."); sendBroadcast(intent);
2.动态注册
动态注册的程序只有在程序运行时才会收到广播消息,程序不运行了,它就收不到了。MyReceiver receiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.MY_BROADCAST"); registerReceiver(receiver, filter);
注销:unregisterReceiver(receiver);
补充:BroadcastReceiver的生命周期
BroadcastReceiver的生命周期,从对象调用它开始,到onReceiver方法执行完成之后结束。另外,每次广播被接收后会重新创建BroadcastReceiver对象,并在onReceiver方法中执行完就销毁,如果BroadcastReceiver的onReceiver方法中不能在10秒内执行完成,Android会出现ANR异常。所以不要在BroadcastReceiver的onReceiver方法中执行耗时的操作。有序广播:sendOrderedBroadcast(intent, null);
<receiver android:name=".MyReceiver"> <intent-filter android:priority="8"> <action android:name="android.intent.action.MY_BROADCAST"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
在Intent-filter中添加一个android:priority=”8”属性,这个就是接收器优先级,数字越大的接收器,优先级越高,越先接到广播。
在一个接收器收到发来的Intent后,可以对其进行更改,对发送来的广播Intent进行修改是利用setResultExtras(bundle);
public class FirstRecever extends BroadcastReceiver { private static final String TAG = "MyReceiver"; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //先获得传过来的MSG String msg = intent.getStringExtra("msg"); Log.i(TAG, "FirstRecever:"+msg); //接收通过setResultExtras传过来的msg String msg = getResultExtras(true).getString("msg"); Log.i(TAG, "SecondReceiver: " + msg); //更改广播数据 Bundle bundle = new Bundle(); bundle.putString("msg", msg + "@FirstReceiver"); setResultExtras(bundle); } }
通过setResultExtras(bundle); 传递的数据是不会更改原生广播的数据的。也只是原来广播数据中额外添加的数据
可以使用abortBroadcast(); //终止消息再传递
相关文章推荐
- Android开发--四大组件之BroadcastReceiver广播接收器
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- 【Android学习之道】 四大组件之广播接收器Broadcast Receiver
- Android核心基础-9.Android四大组件之BroadcastReceiver
- 四大应用组件之BroadcastReceiver【Android】
- Android入门(50)——第五章 四大组件之BroadcastReceiver
- Android四大组件之Broadcast(广播接收BroadcastReceiver)
- Android四大组件之BroadcastReceiver
- android四大组件(总结)activity、service、content provider、broadcast receiver
- Android四大基本组件之一 ,广播(broadcast receiver)---有序广播
- Android四大组件之四:BroadcastReceiver 广播接收器
- Android四大组件之BroadcastReceiver.
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Android 四大组件之BroadcastReceiver(发送有序无序广播)
- Android 四大组件之Broadcast receiver
- Android 技术专题Feature系列第一篇 四大组件之BroadcastReceiver
- Android 四大组件之一 :BroadCastReceiver 广播接收器详解
- android四大组件之BroadcastReceiver
- Android四大组件之一:BroadcastReceiver(广播接收者)
- [置顶] Android四大组件之BroadcastReceiver