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的
|
尽管该方法在api21以后标记为弃用的,但是在framework中,却很常见,例如
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);