盒子
盒子
Posts List
  1. 一. 广播注册方式
    1. 静态注册
    2. 动态注册
  2. 二. 广播类型
    1. 普通广播
    2. 系统广播
    3. 有序广播
    4. 应用内广播
  3. 三. 广播发送
    1. 显式发送
    2. 隐式发送

广播小结

四大组件之一,有三个角色
广播发布者
广播注册者
AMS(activity manager service)

工作原理,观察者模式。

广播是进程间通信的一种方式,优势在于不关注是否有人监听。

一. 广播注册方式

静态注册

静态注册的广播,在清单文件中,在app安装后

<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:process=":myreceiver"
>
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"></action>
</intent-filter>
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
</intent-filter>
</receiver>

动态注册

dynamicBroadcastReceiver = new DynamicBroadcastReceiver();
IntentFilter filter = new IntentFilter("android.net.dynamicBroadcast");
registerReceiver(dynamicBroadcastReceiver , filter);

二. 广播类型

普通广播

自定义广播,在IntentFilter中定义action字段标志。

<intent-filter>
<action android:name="CONNECTIFY_CHANGE"></action>
</intent-filter>

普通广播发送:

sendBroadcast(intent);

系统广播

系统自动发送,如开启关闭网络,挂载,开机,电量低等等。

有序广播

有序广发发送方式

sendOrderedBroadcast(intent , "permission");

有序广播的接受顺序以priority排序,优先级的设置方式

<intent-filter android:priority="100">

同优先级的广播接受者,动态注册优先级高于静态注册优先级,且,优先级高的可以决定是否截断广播传播。终止方式,在receiver中调用

abortBroadcast();

应用内广播

该广播仅在同一应用内传播,且调用方式与注册方式与普通和系统广播不一样,需要使用LocalBroadcastManager

LocalBroadcastManager.getInstance(this).sendBroadcast(intent)

三. 广播发送

显式发送

显式发送的广播会指定广播的接受者,切仅能作用于静态广播,动态广播无法显式发送。

Intent intent = new Intent(this,MyBroadcastReceiver.class);
intent.setAction("CONNECTIFY_CHANGE");
sendBroadcast(intent);

隐式发送

隐式广播不指定接受者,会根据广播的intentFilter和permission来确定是否接受广播。

Intent intent2 = new Intent();
intent2.setAction("android.net.dynamicBroadcast");
sendBroadcast(intent2);
支持一下
扫一扫,支持牛头码农