今天看啥  ›  专栏  ›  Maker星蔚

Android基础-四大组件之Broadcast广播(使用app专属的更安全的本地广播)

Maker星蔚  · 简书  ·  · 2019-07-14 15:15
Android四大组件分别为:1.活动Activity,2.服务Service,3.广播接收器Broadcast Receiver,4.内容提供器Content Provider

在我之前的博客中写过广播的概念与基础用法,Android基础-四大组件之Broadcast广播(基础).

为什么要用本地广播?

但是那篇博客只是对广播的初步了解,案例中发送的自定义广播属于系统全局广播,即发出的广播可以被其他任何app接受到,当然我们也可以接受别的app发送的广播,但是这就涉及到安全性问题了,万一广播里包含一些比较重要的数据呢?这样的广播容易被其他app获取,而且之前博客定义过的广播接收器也会接收到其他app发来的对我们没有用处的垃圾广播。

总结就两点:
①传递数据不安全,容易泄露
②广播接收器会接受无用的广播

为了解决这一问题,就需要使用安卓自带的本地广播了。

本地广播的特点

①本地广播只能在app内部进行传递——>解决问题一
②广播接收器只能接受app内部发出的广播——>解决问题二

也正是因为前面两个特点所以使得本地广播有了下面这个特点:
③发送本地广播比全局广播效率更高更安全。

除此之外,还有一个用法上的需要注意的地方:
④本地广播不能通过静态注册来接收
原因是因为静态注册本身是为了让程序未启动的情况下也能收到广播,而发送本地广播时程序已经启动,因此不需要静态注册此功能。

本地广播的代码实现

使用LocalBroadcastManager对广播进行管理,其他写法基本和之前发送系统全局广播是一致的。
具体之前的写法可参考:
Android基础-四大组件之Broadcast广播(基础).
区别:
①使用LocalBroadcastManager实例对象的registerReceiver(myReceiver,intentFilter)方法来注册本地广播,
②使用localBroadcastManager实例对象的sendBroadcast(intent)方法来发送本地广播。

举个栗子:

        intentFilter = new IntentFilter();
        intentFilter.addAction("myAction");
        myReceiver=new MyReceiver();

//本地广播
        localBroadcastManager =localBroadcastManager.getInstance(this);
        localBroadcastManager.registerReceiver(myReceiver,intentFilter);//注册本地广播
        Intent intent =new Intent("myAction");
        localBroadcastManager.sendBroadcast(intent);

同样,记得在onDestroy中取消注册本地广播。

@Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册
        unregisterReceiver(myReceiver);
        //取消注册本地广播
        localBroadcastManager.unregisterReceiver(myReceiver);
    }



原文地址:访问原文地址
快照地址: 访问文章快照