android四大组件之BroadcastReceiver的学习(四大组件之路:二)

BroadcastReceiver(广播接收者)

1.什么是BroadcastReceiver

BroadcastReceiver是Android四大组件之一

BroadcastReceiver作为一个监听器,对于App发出的广播做出响应

2.BroadcastReceiver的作用是什么

BroadcastReceiver可以完成Android中不同组件的通信

BroadcastReceiver可以完成Android中不同应用之间的通信(广播可以跨越不同app直接通信)

BroadcastReceiver可以在特殊事件被触发时完成特定的操作(如锁屏被解锁时,电话接听时,网络可用时)

3.BroadcastReceiver的实现原理


整个模型分为三个部分

1.广播发布者:发送广播

2.AMS(Activity Manager Service):根据消息发布者的要求,在已注册列表中寻找适合的消息订阅者。

3.广播接收者:接受广播

4.我该如何使用BroadcastReceiver?

[1]定义一个广播接收者

定义一个类继承BroadcastReceiver

重写onReceive方法

示例代码

private class MyBroadcastReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent) {

    }
}

onReceive方法的作用以及为什么要重写onReceive方法

上面提到过,广播接收者是用来对app发出的广播产生相应

那么当BroadcastReceiver接收到一条对应广播的时候将自动调用onReceive方法

[2]注册广播接收者

注册的方式有两种

1.静态注册

注册方式:在AndroidManifest.xml里通过<receive>标签声明、

当此 App首次启动时,系统会自动实例化mBroadcastReceiver类,并注册到系统中。

       <receiver android:name=".MyBroadcastReceiver"
            >
            <intent-filter
                >
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
                    
           
            </intent-filter>
        </receiver>

2.动态注册

注册方式:在代码中调用Context.registerReceiver()方法

示例代码

    @Override
    protected void onResume() {
        super.onResume();
        //1.实例化broadcastReceiver类和IntentFilter类
        MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        //2.设置接受广播类型
        intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
        //3.调用registerReceiver方法注册广播
        registerReceiver(myBroadcastReceiver,intentFilter);
    }

注册广播后要销毁广播

示例代码

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(myBroadcastReceiver);
    }

对于动态广播 有销毁就有注销 否则会造成内存泄漏

动态注册和静态注册的区别



5.我该如何发送一个广播

广播 是 用”意图(Intent)“标识

定义广播的本质 = 定义广播所具备的“意图(Intent)”

广播发送 = 广播发送者 将此广播的“意图(Intent)”通过sendBroadcast()方法发送出去

6.广播的分类

1.有序广播

有序广播,即从优先级别最高的广播接收器开始接收,接收完了如果没有丢弃,就下传给下一个次高优先级别的广播接收器进行处理,依次类推,直到最后。如果多个应用程序设置的优先级别相同,则谁先注册的广播,谁就可以优先接收到广播。通过Context.sendorderBroadCast()方法来发送,sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);,其中的参数resultReceiver,可以自己重写一个类,作为一个最终的receive 最后都能够接收到广播,最终的receiver 不需要再清单文件里面配置,initialData可以作为传输的数据
广播可以被终止,数据传输过程中可以被修改。

2.无序广播

通过Context.sendBroadcast()方法来发送,它是完全异步的。
所有的receivers(接收器)的执行顺序不确定,因此所有的receivers(接收器)接收broadcast的顺序不确定。
这种方式效率更高,但是BroadcastReceiver无法使用setResult系列、getResult系列及abort broadcast(中止)系列API。
广播不能被终止,数据不能被修改。









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值