美文网首页
安卓四大组件之BroadCastReceiver

安卓四大组件之BroadCastReceiver

作者: watayouxiang | 来源:发表于2017-05-13 21:52 被阅读40次

    简介BroadCastReceiver

    广播分为两种:无序广播,有序广播

    在清单文件中注册广播称之为静态注册

    <receiver android:name=".BroadcastReceiver1" > 
        <intent-filter>
            <action android:name="android.intent.action.CALL" >
            </action>
        </intent-filter>
    </receiver>
    

    在代码中注册称之为动态注册

    BroadcastReceiver receiver = new BroadcastReceiver();
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(CALL_ACTION); 
    context.registerReceiver(receiver, intentFilter);
    

    BroadCastReceiver的生命周期

    1. 广播接收者的生命周期非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁;
    2. 广播接收者中不要做一些耗时的工作,否则会弹出 Application No Response 错误对话框;
    3. 最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉;
    4. 耗时的较长的工作最好放在服务中完成;

    如何让自己的广播只让指定的 app 接收

    发送广播的应用A要在清单文件中注册自定义权限,假设自定义权限名叫com.test.android.permission

    <permission android:name="com.test.android.permission"
                android:protectionLevel="normal" />
    
    <uses-permission android:name="com.test.android.permission"/>
    

    接收广播的应用B要在清单文件中注册

    <uses-permission android:name="com.test.android.permission"/>
    
    或者:
    
    <receiver android:name="com.itheima.android.broadcastReceiver.MyReceiver"
              android:permission="com.test.android.permission">
        <intent-filter >
            <action android:name="com.test.mybroadcast"></action>
        </intent-filter>
    </receiver>
    

    什么是最终广播接收者

    ContextWrapper.sendOrderedBroadcast() 发送的有序广播

    该广播会被执行两次,第一次是按顺序执行到的一次,第二次是作为final receiver必须接收的一次

    广播的优先级对无序广播生效吗

    生效的,广播的优先级范围是 [-1000, +1000],但设置的优先级范围超过这个范围也是可以的

    动态注册广播优先级谁高

    谁先注册谁优先级高

    如何判断接收的是有序广播还是无序广播

    在BroadcastRecevier类中的onReceiver方法中,可以调用 boolean b = isOrderedBroadcast(); 判断

    相关文章

      网友评论

          本文标题:安卓四大组件之BroadCastReceiver

          本文链接:https://www.haomeiwen.com/subject/rglfxxtx.html