Android的普通广播和有序广播
16lz
2021-01-26
普通广播:
普通广播对于任何广播的接收者来说,都是异步的,每个接收者都无需等待即可接收到广播,相互之间没有影响。这种广播无法终止,即无法阻止其他广播接收者的接收动作。
发送普通广播:
- Intent intent = new Intent("android.intent.action.MY_BROADCAST");
- intent.putExtra("msg", "Hello receiver.");
- sendBroadcast(intent);
有序广播:
有序广播会将广播优先发送给接收优先级较高的BroadcastReceiver,然后优先级高的BroadcastReceiver再传给优先级低的BroadcastReceiver,前者可以终止广播的继续传播。在优先级高的BroadcastReceiver中,还可以通过setResultExtras()方法,将一个Bundle对象设置为结果集对象,传递到下一个BroadcastReceiver那里。而低优先级的BroadcastReceiver可以通过getResultExtras()方法获取到最新的经过处理的信息集合。
优先级的设置:
通常是在AndroidManifest.xml中注册广播地址时,通过android:priority属性设置广播接收的优先级。该属性值的范围是-1000~1000,数值越大,优先级越高。如:
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter android:priority="1000">
- <action android:name="android.intent.action.MY_BROADCAST" />
- <category android:name="android.intent.category.DEFAULT" />
- intent-filter>
- receiver>
发送有序广播:
- Intent intent = new Intent("android.intent.action.MY_BROADCAST");
- intent.putExtra("msg", "Hello receiver.");
- sendOrderedBroadcast(intent, "bigben.permission.MY_BROADCAST_PERMISSION");
- <permission android:protectionLevel="normal"
- android:name="bigben.permission.MY_BROADCAST_PERMISSION" />
- <uses-permission android:name="bigben.permission.MY_BROADCAST_PERMISSION" />
终止广播:
在优先级高的BroadcastReceiver的onReceiver()方法中添加代码:
- abortBroadcast();
更多相关文章
- Android腾讯微薄客户端开发九:博主详情界面篇(广播,听众,收听)
- 从D-Bus(DBus)的使用看Android设计策略中安全的优先级
- [置顶] Android(安卓)OnLowMemory和OnTrimMemory
- android四大组件启动流程-BroadcastReceiver启动流程(基于androi
- android eventbus
- android中在代码中创建应用的快捷图标
- Android(安卓)基础常见记录
- Android的SD卡插拔广播
- Android(安卓)通过广播接受者监听用户的短信