BroadcastReceiver,被称为Android四大组件之一,中文翻译为 - 广播
一.什么是BroadcastReceiver
1.广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。比如,低电量通知,拍摄了一张照片等都是广播。
2.应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。
3.广播接收器是没有用户界面的。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。
二.BroadcastReceiver的分类
1.无序广播(普通广播):对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。这个也是我们使用较多的一种广播类型。
2.有序广播:它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播
三.如何使用BroadcastReceiver
1.广播使用基本分为三步
(1)首先,创建自定义类MyBroadcastReceiver继承 BroadcastReceiver 类,
(2)其次,需要注册广播,有静态注册和动态注册两种方法。静态注册指在manifest文件中注册的广播,这种注册的广播具有应用程序级别的效果。动态注册就是通过代码进行注册,比如我们在Activity中通过"Context.registerReceiver"
进行注册,这种广播具有组件级别的效果,即当我们调用"unregisterReceiver()"
方法或组件销毁广播就无法被接收处理了。
""
(3)最后,发送广播。通过Context的"sendBroadcast()"
方法或"sendOrderedBroadcast()"
方法进行发送普通广播或有序广播。
2.静态广播
(1)创建MyBroadcastReceiver继承自BroadcastReceiver,重写其"onReceive()"
方法。
public class MyBroadcastReceiver extends BroadcastReceiver {
public MyBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getStringExtra("data");
Log.e(TAG, data);
}
}
(2)注册广播,在manifest文件中进行注册。注意在注册广播的时候需要指定该广播的action
<receiver android:name=".NormalReceiver">
<intent-filter>
<action android:name="com.example.huluwa.receiver" />
</intent-filter>
</receiver>
(3)发送广播
Intent intent = new Intent();
intent.setAction("com.example.huluwa.receiver");
intent.putExtra("data", "data");
sendBroadcast(intent);
3.动态广播
(1)在Activity的onResume()方法中注册
mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);
registerReceiver(mBroadcastReceiver, intentFilter);
(2)注册后要记得销毁
unregisterReceiver(mBroadcastReceiver);
四.静态广播和动态广播优缺点
1.静态广播
(1)优点:
不受任何组件生命周期影响
(2)缺点:
耗电,占内存
2.动态广播
(1)优点:
注册销毁灵活
(2)缺点:
省电,不占内存
网友评论