关于使用广播时遇到一些问题

fragment的生命周期和activity比较相似,不过更加复杂一些,具体如下:

如果在fragment中注册了一些广播,那么注销广播的时候,需要放在onDetach()里面,如果放在onBackPressed(),会报运行时错误,也许用户点击两次返回键,才能退出fragment,所以注销广播还是应该放在fragment的生命周期的末尾,此外,重写生命周期的方法时,要调用父类的相关方法。

1.其实在使用广播的时候,最常见的问题首先是*****leaked IntentReceiver****,所以在调用registerReceiver()方法后,要记得在Activity或者fragment销毁之前,调用unregisterReceiver()。

2.此外,还常见的一个错误是,广播没有写保护,做法是在AndroidManifest.xml中,对标示广播的action添加protected-broadcast属性,就像下面这样。

<protected-broadcast android:name="android.intent.action.SCREEN_OFF" />

3.发送广播的是无效用户without a qualified user,对于framework层中发送广播的时候,如果直接调用Context的sendBraodcast()方法就会报该警告,常见的做法是调用Context的

sendStickyBroadcastAsUser(Intent intent, UserHandle user)

尽管该方法在api21以后标记为弃用的,但是在framework中,却很常见,例如

mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值