Android四大组件之BroadcastReceiver

本文详细解读了广播系统中的有序广播与无序广播的区别,以及动态注册与静态注册的方法。注意事项包括避免在广播中执行耗时操作,以及如何正确使用LocalBroadcastManager。关键点包括接收器实现、IntentFilter应用和广播使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.两种类型
有序广播:同步执行,发出后,同时只有一个能收到,操作完成后依次向下发送,可以被拦截
无序广播:异步执行,发出广播后,所有的广播接收器几乎会同时收到,无法被拦截
2.两种注册方式
动态注册:代码中指定IntentFilter,增加不同的Action,使用后要手动取消注册
静态注册:在清单文件中注册,可以让程序在未启动时就可以接收到广播
3.注意事项
不要在广播里添加过多逻辑或耗时操作,广播中是不允许开辟线程的, 当onReceiver运行较长时间(超过10秒)还没有结束的话,会报错ANR, 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification提示, Activity等!
4.使用
动态注册广播
    1> 继承BroadcastReceiver,实现onReceiver方法,里面写逻辑
    2> 发送  使用完成后调用unregisterReceiver(myReceiver)中取消注册 
myReceiver = new MyBRReceiver();
        IntentFilter itFilter = new IntentFilter();
        itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(myReceiver, itFilter);
静态注册
    1> 自定义一个BroadcastReceiver,重写onReceive完成逻辑
    2> 在清单文件中注册BroadcastReceiver,添加开机广播的intent-filter,别忘了加上android.permission.RECEIVE_BOOT_COMPLETED的权限哦!
    3> 使用sendBroadcast(new Intent(""))发送广播
5.本地广播
    注意:本地广播无法通过静态注册方式来接受,相比起系统全局广播更加高效
    使用LocalBroadcastManager来管理广播
    1> 调用LocalBroadcastManager()获取实列
    2> 调用 .registerReceiver()注册
    3> 调用 .sendBroadcast()发送
    4> 调用 .unregisterReceiver()取消注册
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值