• android 广播


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

    代码模板

    发送广播

        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,

  • 相关阅读:
    MySql
    Zookeeper
    Kafka
    Mybatis
    Spring/Spring MVC
    Spring Boot/Spring Cloud
    网络
    设计模式
    Strassen algorithm(O(n^lg7))
    dynamic programming:find max subarray
  • 原文地址:https://www.cnblogs.com/franksunny/p/5500186.html
Copyright © 2020-2023  润新知