安卓四大组件(二)

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

Broadcast简介

Broadcast是android中的四大组件之一,是在组件之间传播数据(Intent)的一种机制。广播的发送者和接收者事先是不需要知道对方的存在的。这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。

广播特性

  1. 广播的生命周期很短,onReceive方法—结束 整个过程就结束了。
  2. 广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框,如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由 Service 来完成。
  3. 每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, 则认定程序无响应。不推荐在里面开子线程,因为往往线程还未结束,广播对象就已经执行完毕被系统销毁。

Android中的广播主要分为两种类型:

标准广播

是一种完全异步执行的广播,这种广播的效率很高,但也无法被截断。

b1.png

有序广播

是一种同步执行的方波,同一时刻只有一个广播接收器能收到消息,只有上一个的逻辑执行完毕后才会继续传递。

b2.png

广播接收

动态注册

IntentFilter filter = new IntentFilter();
filter.addAction("这是一个action");
BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: " + "接收消息处理");
    }
};
registerReceiver(mReceiver, filter);
复制代码

动态注册的广播接收器一定都要取消注册才行,这里一般是在onDestroy()方法中通过调用unregisterReceiver(mReceiver);

静态注册

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>//此处必需指定action,否则监听不到
    </intent-filter>
</receiver>
复制代码

猜你喜欢

转载自juejin.im/post/7033344049352491044
今日推荐