Android 四大组件之一Broadcast Receier

/**
 *
 * 广播的分类:
 *      无序:异步执行---接收器几乎同时接受到----            跟优先级无关----效率高--不能截断
 *      有序:同步执行---一次只能有一个接收器接受到,有序传递---根据优先级决定顺序---效率低---可截断
 *
 *  发送方:
 *      系统广播
 *      自定义广播
 *
 * 广播接收器:
 *      注册广播
 *          静态:Manifest.xml
 *          动态:就是在代码中注册
 *              和组件绑定的时候,如果 在activity中注册,activity存活的时候才能接受广播
 *              context.registerReceiver        onCreate()      onResume()
 *              取消注册广播
 *              context.unregisterReceiver      onDestory()     onPause()
 *
 *  发送广播
 *      应用自己的广播
 *      无序广播:   sendBroadcast(intent)
 *      有序广播:   sendOrderedBroadcast(intent,);
 *                  优先级:-1000~1000,字数越大,优先级越高,默认为0
 *                  filter.setPriority(100);//优先级
 *  拦截广播
 *        无序广播里面不能调用abortBroadcast()拦截
 *         有序广播拦截abortBroadcast()//优先级比我低的接收不到
 *
 *  本地广播管理:
 *          初衷:安全性
 *          LocalBroadcastManager
 *              registerReceiver
 *              unregisterReceiver
 *              sendBroadcast
 *              sendOrderedBroadcast
 *              abortBroadcast
 *
 *  广播接收器:onReceive() 运行在主线程中,一般不开启线程,经常发送通知,跳转等不耗时的操作
 *
 */

静态注册:

        <receiver
            android:name=".MyReceiver"
            android:exported="true">
            <intent-filter>
                <!-- BOOT_COMPLETED 启动完成 -->
                <!-- 8.0+ 不推荐静态注册方式 -->

                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <!-- 网络连接发生变化 -->
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

    <!-- 接受开机启动广播的权限 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 添加访问网络状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

动态注册

        //动态注册
        receiver=new MyReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        filter.addAction("com.hfzy.mydome0812.MyBroadCast");
        filter.setPriority(100);//优先级
        registerReceiver(receiver,filter);//广播监听器,监听哪些



        class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //当接受到的广播的时候,会执行到这里

    }


      //取消注册
       unregisterReceiver(receiver);

发送广播

        Intent intent=new Intent();
        intent.setAction("com.hfzy.mydome0812.MyBroadCast");//广播名称可以自己定义,唯一可识别

        //发送无序广播
                sendBroadcast(intent);

        //发送有序广播
                sendOrderedBroadcast(intent,null);

        //本地广播
                private LocalBroadcastManager localBroadcastManager;
                localBroadcastManager=LocalBroadcastManager.getInstance(this);
                localBroadcastManager.sendBroadcast(intent);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值