菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
139
0

android 广播

原创
05/13 14:22
阅读数 20832

关于广播以前感觉是一知半解的,这次看到同事整理的文档,顺带跟着再参考几篇博文也学习整理了下,先上个整理的图

代码模板

发送广播

    public static final String RECEIVE_ACTION = "com.demo.receive_action";
    public static final String RECEIVE_PERMISSION ="com.demo.receive_permission";

    Intent intent = new Intent();
    //设置Action
    intent.setAction(RECEIVE_ACTION);
    //添加附加信息
    intent.putExtra("msg", "我是普通广播");
    //设置指定接送广播的应用报名,可以是其它应用包名字符串,这里使用的是自己
    intent.setPackage(getPackageName());
    //发送广播时指定权限,这里的权限需要在使用方的manifest中通过形如
    // <uses-permission android:name="com.demo.receive_permission" />进行“使用声明”
    sendBroadcast(intent, RECEIVE_PERMISSION);

静态注册

    <!-- 声明权限 -->
    <permission android:name="com.demo.receive_permission"/>

    <!--静态注册
    exported默认为true,在这里指定false,只接受应用内广播-->
    <receiver
        android:name=".DynamicReceiver"
        android:enabled="true"
        android:exported="false"
        android:permission="com.demo.receive_permission">
        <intent-filter android:priority="100">
            <action android:name="com.demo.receive_action"/>
        </intent-filter>
    </receiver>

动态注册

    DynamicReceiver dynamicReceiver = new DynamicReceiver();

    IntentFilter dynamicFilter = new IntentFilter();
    //注册广播的Action
    dynamicFilter.addAction(RECEIVE_ACTION);
    //设置优先级
    dynamicFilter.setPriority(100);
    //注册时设置权限
    registerReceiver(dynamicReceiver, dynamicFilter, RECEIVE_PERMISSION, null);

小结

消息通信在Android上可以用多种方式来实现,我觉得一般而言:

如果是同一进程内跨线程的消息通信可以优先考虑使用RxBus和EventBus等框架(单例是进程内共享内存的);
如果是同一应用内跨进程的消息通信可以优先考虑使用support v4包中的LocalBroadcastManager,当然如果是使用顺序或粘性等特殊广播,就没办法使用LocalBroadcastManager了;
如果是跨应用的消息通信才会考虑使用BroadcastReceive组件。

相关知识内容链接

Android探索之BroadcastReceiver具体使用以及安全性探究
Android BroadcastReceiver介绍
LocalBroadcastManager 的实现原理
Android 自定义权限

自启动失败原因
BroadcastReceiver的原理和使用里面有些注意事项讲的比较细,比如动态注册比静态注册优先级要高,onReceive函数原则不能超过10秒,否则会有ANR,

发表评论

0/200
139 点赞
0 评论
收藏