第五章 全局大喇叭,详解广播机制
来源:互联网 发布:中国网络诗歌网吴扬晋 编辑:程序博客网 时间:2024/05/02 02:27
5.1广播机制简介
广播分为标准广播和有序广播
- 标准广播:异步执行广播,广播发出后,所有的广播接收器都会几乎在同时接收到,没有先后顺序.效率较高,但是无法拦截.
- 有序广播:同步执行广播,同一时刻只有一个广播接收器能够接收到该广播,且仅当该接收器的逻辑执行结束后再回继续传递.优先级高的先收到广播消息(同等优先级则随机选择一个),前面的接收器可以截断正在传播的广播.
5.2接收系统广播
广播接收器可以对自己感兴趣的广播进行注册.注册广播分为静态注册和动态注册.
- 动态注册:在代码中注册.
- 静态注册:在AndroidManifest.xml中注册.
onReceive()内不允许添加过多逻辑或耗时操作.通常半夜打开其他程序或组件的角色.
- 广播接收器中不允许开线程.
- onReceive()运行时间过程而没有结束时,程序会报错.
5.2.1动态注册监听网络变化
步骤:
1.新建一个广播接收器内部类.
2.继承BroadcastReceiver.
3.重写父类的onReceive(),intenFilter中写监听的广播.
注意:
- 仅在软件启动后才有作用.
- onDestroy()中加上unregiReceive(),用于销毁接收器.
示例:
intentFilter = new IntentFilter();intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");networkChangeReceiver = new NetworkChangeReceiver();registerReceiver(networkChangeReceiver,intentFilter);
5.2.2静态注册实现开机启动
步骤:
1.新建广播接收器类.
2.继承BroadcastReceiver.
3.AndroidManifest.xml中注册,注册中填写监听的广播.
注意:
- 该方法可以实现开机自启
- 注册在内
示例:
<receiver android:name=".BootCompleteReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter></receiver>
5.3发送自定义广播
5.3.1发送标准广播
步骤:
1.new Intent,参数为广播名.
2.sendBroadcast(intent).
注意:
- 可以在intent中传递一些数据被广播接收器.
示例:
Intent intent = new Intent("com.wjoker.broadcasttest.MY_BROADCAST");sendBroadcast(intent);
5.3.2发送有序广播(和截断广播
步骤:
1.发送广播使用sendOrderBroadcast().
2.在注册接收器处加权限.
3.onReceive()处使用abortBroadcast().(截断)
步骤:
Intent intent = new Intent("com.wjoker.broadcasttest.MY_BROADCAST");sendOrderedBroadcast(intent,null);
<receiver android:name=".MyBroadcastReceive"> <intent-filter android:priority="100"> <action android:name="com.wjoker.broadcasttest.MY_BROADCAST"/> </intent-filter></receiver>
public void onReceive(Context context, Intent intent) { Toast.makeText(context,"test",Toast.LENGTH_SHORT).show(); abortBroadcast();}
5.4使用本地广播
用于解决安全性问题.只接受本应用内的广播或只在本应用内传递.
步骤:
1.通过LocalBroadcastManager对广播进行管理(发送/接收).
注意:
- 本地广播无法通过静态方式注册.
- 比系统全局广播效率更高.
示例:
private LocalBroadcastManager localBroadcastManager;localBroadcastManager = LocalBroadcastManager.getInstance(this);Intent intent = new Intent("com.wjoker.broadcasttest.LOCAL_BROADCAST");localBroadcastManager.sendBroadcast(intent);//发送本地广播
intentFilter = new IntentFilter();intentFilter.addAction("com.wjoker.broadcasttest.LOCAL_BROADCAST");localReceiver = new LocalReceiver();localBroadcastManager.registerReceiver(localReceiver, intentFilter);// 注册本地广播监听器
总结
1.广播根据是否存在接收顺序可分为标准广播和有序广播;根据范围可分为全局广播和本地广播.
2.有序广播可以截断广播;本地广播是安全且高效的.
3.广播接收器注册分为动态注册(代码中注册,启动后开始监听)和静态注册(AndroidManifest.xml中注册,随时监听).
4.onReceive()中不允许开多线程且运行过长会报错.
5.动态注册的监听内容在interFace.addAction()中添加,静态注册在中添加.
6.要销毁接收器.
7.发送标准广播,使用sendBroadcast(intent).
8.发送有序广播使用sendOrderBroadcast(intent),要在接收器里设置优先级.
9.使用abortBroadcast()截断广播(仅有序).
10.本地广播使用LocalBroadcastManager管理(接收/发送).
11.有错误还请指教.
荆轲刺秦王.
- 第五章 全局大喇叭,详解广播机制
- 全局大喇叭,详解广播机制
- 全局大喇叭,详解广播机制
- 全局大喇叭,详解广播机制
- 全局大喇叭,详解广播机制
- 第5章 全局大喇叭,详解广播机制
- 全局大喇叭 广播机制
- 全局大喇叭-广播机制
- 第二行代码学习笔记——第五章:全局大喇叭——详解广播机制
- 全局大喇叭 广播机制 Receiver
- 全局大喇叭,广播机制初篇。
- 阅读郭林《第一行代码》的笔记——第5章 全局大喇叭,详解广播机制
- 【Android成长之路】全局大喇叭——广播机制的浅谈(发送自定义广播)
- 【Android成长之路】全局大喇叭——广播机制的浅谈(使用本地广播)
- 【Android成长之路】全局大喇叭——广播机制的浅谈(接收系统广播与动、静态注册接收器)
- android 大喇叭,广播实战
- 第五章 广播机制
- 第五章 广播机制
- 20160124.CCPP详解体系(0003天)
- SwipeRefreshLayout和ConvenientBanner 事件冲突解决
- 原型工具axure7.0
- 运维小知识之nginx---..nginx-sticky-module-1.1ngx_http_sticky_misc.cIn function ‘ngx_http_sticky_misc_text_
- Mongodb无法启动:The default storage engine 'wiredTiger' is not available with this build of mongod.
- 第五章 全局大喇叭,详解广播机制
- 在Myeclipse下运行JUnit & ant
- poj 3320Jessica's Reading Problem 尺取法初探(首尾指针法)
- lodop 破解版+使用教程 目前最全的客户端打印
- 一维指针和二维指针指向二维数组的一些问题
- 来德国已经三个月了,激励一下自己~
- 20160125.CCPP详解体系(0004天)
- linux 添加服务器信任关系 & scp的使用
- POJ 3616 Milking Time(最大递增子序列)