最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android BroadcastReceiver廣播注冊方式總結(jié)

 更新時間:2017年01月12日 09:53:20   投稿:lqh  
這篇文章主要介紹了Android BroadcastReceiver廣播注冊方式總結(jié)的相關(guān)資料,需要的朋友可以參考下

Android:BroadcastReceiver注冊的方式分為兩種:

靜態(tài)注冊

動態(tài)注冊

1. 靜態(tài)注冊

在AndroidManifest.xml里通過標(biāo)簽聲明

屬性說明:

<receiver 
  android:enabled=["true" | "false"]
//此broadcastReceiver能否接收其他App的發(fā)出的廣播
//默認(rèn)值是由receiver中有無intent-filter決定的:如果有intent-filter,默認(rèn)值為true,否則為false
  android:exported=["true" | "false"]
  android:icon="drawable resource"
  android:label="string resource"
//繼承BroadcastReceiver子類的類名
  android:name=".mBroadcastReceiver"
//具有相應(yīng)權(quán)限的廣播發(fā)送者發(fā)送的廣播才能被此BroadcastReceiver所接收;
  android:permission="string"
//BroadcastReceiver運(yùn)行所處的進(jìn)程
//默認(rèn)為app的進(jìn)程,可以指定獨(dú)立的進(jìn)程
//注:Android四大基本組件都可以通過此屬性指定自己的獨(dú)立進(jìn)程
  android:process="string" >

//用于指定此廣播接收器將接收的廣播類型
//本示例中給出的是用于接收網(wǎng)絡(luò)狀態(tài)改變時發(fā)出的廣播
 <intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  </intent-filter>
</receiver>

注冊示例

<receiver 
  //此廣播接收者類是mBroadcastReceiver
  android:name=".mBroadcastReceiver" >
  //用于接收網(wǎng)絡(luò)狀態(tài)改變時發(fā)出的廣播
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  </intent-filter>
</receiver>

當(dāng)此App首次啟動時,系統(tǒng)會自動實(shí)例化mBroadcastReceiver類,并注冊到系統(tǒng)中。

2. 動態(tài)注冊

在代碼中通過調(diào)用Context的registerReceiver()方法進(jìn)行動態(tài)注冊BroadcastReceiver,具體代碼如下:

@Override
 protected void onResume(){
   super.onResume();

  //實(shí)例化BroadcastReceiver子類 & IntentFilter
   mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
   IntentFilter intentFilter = new IntentFilter();

  //設(shè)置接收廣播的類型
   intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);

  //調(diào)用Context的registerReceiver()方法進(jìn)行動態(tài)注冊
   registerReceiver(mBroadcastReceiver, intentFilter);
 }


//注冊廣播后,要在相應(yīng)位置記得銷毀廣播
//即在onPause() 中unregisterReceiver(mBroadcastReceiver)
//當(dāng)此Activity實(shí)例化時,會動態(tài)將MyBroadcastReceiver注冊到系統(tǒng)中
//當(dāng)此Activity銷毀時,動態(tài)注冊的MyBroadcastReceiver將不再接收到相應(yīng)的廣播。
 @Override
 protected void onPause() {
   super.onPause();
   //銷毀在onResume()方法中的廣播
   unregisterReceiver(mBroadcastReceiver);
   }
}

3. 兩種注冊方式的區(qū)別

注冊方式的區(qū)別

4. 特別注意

動態(tài)廣播最好在Activity的onResume()注冊、onPause()注銷。

原因:

1.對于動態(tài)廣播,有注冊就必然得有注銷,否則會導(dǎo)致內(nèi)存泄露

重復(fù)注冊、重復(fù)注銷也不允許

2.Activity生命周期如下:

Activity生命周期

Activity生命周期的方法是成對出現(xiàn)的:

- onCreate() & onDestory()
- onStart() & onStop()
- onResume() & onPause()

在onResume()注冊、onPause()注銷是因?yàn)閛nPause()在App死亡前一定會被執(zhí)行,從而保證廣播在App死亡前一定會被注銷,從而防止內(nèi)存泄露。

1.不在onCreate() & onDestory() 或 onStart() & onStop()注冊、注銷是因?yàn)椋?
當(dāng)系統(tǒng)因?yàn)閮?nèi)存不足(優(yōu)先級更高的應(yīng)用需要內(nèi)存,請看上圖紅框)要回收Activity占用的資源時,Activity在執(zhí)行完onPause()方法后就會被銷毀,有些生命周期方法onStop(),onDestory()就不會執(zhí)行。當(dāng)再回到此Activity時,是從onCreate方法開始執(zhí)行。
2.假設(shè)我們將廣播的注銷放在onStop(),onDestory()方法里的話,有可能在Activity被銷毀后還未執(zhí)行onStop(),onDestory()方法,即廣播仍還未注銷,從而導(dǎo)致內(nèi)存泄露。
3. 但是,onPause()一定會被執(zhí)行,從而保證了廣播在App死亡前一定會被注銷,從而防止內(nèi)存泄露。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

最新評論

洛川县| 英德市| 柏乡县| 吉林省| 黄大仙区| 徐闻县| 新巴尔虎右旗| 哈密市| 裕民县| 长治市| 阳春市| 汉寿县| 通许县| 安仁县| 招远市| 雅江县| 锦屏县| 庆城县| 米易县| 德阳市| 静安区| 凉城县| 石阡县| 弥勒县| 射洪县| 黑龙江省| 开原市| 乐都县| 贵港市| 东乌珠穆沁旗| 普兰店市| 巴楚县| 大洼县| 綦江县| 金湖县| 荥经县| 康乐县| 新乡县| 炎陵县| 全州县| 水富县|