★Android基础篇-你应该知道的 BroadcastReceiver

版权声明:随便转载 共同进步! https://blog.csdn.net/MacaoPark/article/details/79371434

广播的概念

Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。
Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁

广播的类型
(1)无序(标准)广播 :是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎同一时间接收到这条广播消息,他们之间没有任何顺序可言.这种广播效率更高,但是意味着无法截断.

这里写图片描述

(2)有序广播:则是一种同步执行的广播,在广播发出去之后,同一时间只有一个广播接收器能够接受这条广播的信息,当这个广播接收器中的逻辑执行完毕后广播才会继续传递.

这里写图片描述

核心

广播分为两个角色,广播发送者,广播接受者

实现原理
在android中的 BroadcastReceiver使用的设计模式则是观察者模式基于消息发布/订阅事件模型

模型中有三个角色:

消息订阅者(广播接收者)
消息发布者(广播发布者)
消息中心(AMS,即Activity Manager Service)

这里写图片描述

广播接收者 通过 Binder机制在 AMS 注册
广播发送者 通过 Binder 机制向 AMS 发送广播
AMS 根据 广播发送者 要求,在已注册列表中,寻找合适的广播接收者
寻找依据:IntentFilter / Permission
AMS将广播发送到合适的广播接收者相应的消息循环队列中;
广播接收者通过 消息循环 拿到此广播,并回调 onReceive()

广播的注册

广播的注册分为静态注册与动态注册

静态注册:这种方法是在配置AndroidManifest.xml配置文件中注册,通过这种方式注册的广播为常驻型广播,也就是说如果应用程序关闭了,有相应事件触发程序还是会运行.

       <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                //自定义Action
                <action android:name="MLY" />
            </intent-filter>
        </receiver>

动态注册

 IntentFilter filter = new IntentFilter();
        filter.addAction("xia");
        dynamicReceiver = new DynamicReceiver();
        //注册广播接收
        registerReceiver(dynamicReceiver, filter);

设置addAction标签,一定要setAction这个标签,不然的话在DynamicReceiver中拿不到回调!

   public void send2(View v) {
        Intent intent = new Intent();
        intent.setAction("xia");
        intent.putExtra("sele", "特拉法尔加~罗");
        sendBroadcast(intent);
    }

效果图:

这里写图片描述

源码地址:
http://download.csdn.net/detail/macaopark/9923045

猜你喜欢

转载自blog.csdn.net/MacaoPark/article/details/79371434