第五章 全局大喇叭,详解广播机制

2016-01-25  本文已影响0人  wyxjoker

5.1广播机制简介

广播分为标准广播和有序广播

5.2接收系统广播

广播接收器可以对自己感兴趣的广播进行注册.注册广播分为静态注册和动态注册.

onReceive()内不允许添加过多逻辑或耗时操作.通常半夜打开其他程序或组件的角色.

5.2.1动态注册监听网络变化

步骤:
1.新建一个广播接收器内部类.
2.继承BroadcastReceiver.
3.重写父类的onReceive(),intenFilter中写监听的广播.
注意:

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 = 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()中添加,静态注册在<action>中添加.
6.要销毁接收器.
7.发送标准广播,使用sendBroadcast(intent).
8.发送有序广播使用sendOrderBroadcast(intent),要在接收器里设置优先级.
9.使用abortBroadcast()截断广播(仅有序).
10.本地广播使用LocalBroadcastManager管理(接收/发送).

上一篇 下一篇

猜你喜欢

热点阅读