欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Android:BroadcastReceiver注冊(cè)的方式分為兩種:

靜態(tài)注冊(cè)

動(dòng)態(tài)注冊(cè)

1. 靜態(tài)注冊(cè)

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

屬性說(shuō)明:

<receiver 
  android:enabled=["true" | "false"]
//此broadcastReceiver能否接收其他App的發(fā)出的廣播
//默認(rèn)值是由receiver中有無(wú)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四大基本組件都可以通過(guò)此屬性指定自己的獨(dú)立進(jìn)程
  android:process="string" >

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

注冊(cè)示例

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

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

2. 動(dòng)態(tài)注冊(cè)

在代碼中通過(guò)調(diào)用Context的registerReceiver()方法進(jìn)行動(dòng)態(tài)注冊(cè)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)行動(dòng)態(tài)注冊(cè)
   registerReceiver(mBroadcastReceiver, intentFilter);
 }


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

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

注冊(cè)方式的區(qū)別

4. 特別注意

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

原因:

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

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

2.Activity生命周期如下:

Activity生命周期

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

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

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

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

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

相關(guān)文章

  • 深入解析Android中View創(chuàng)建的全過(guò)程

    深入解析Android中View創(chuàng)建的全過(guò)程

    這篇文章主要給大家深入的解析了關(guān)于Android中View創(chuàng)建的全過(guò)程,文中介紹的非常詳細(xì),相信對(duì)大家會(huì)有一定的參考借鑒,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-03-03
  • Android使用自定義屬性實(shí)現(xiàn)圖片自動(dòng)播放滾動(dòng)的功能

    Android使用自定義屬性實(shí)現(xiàn)圖片自動(dòng)播放滾動(dòng)的功能

    這篇文章主要介紹了Android使用自定義屬性實(shí)現(xiàn)圖片自動(dòng)播放滾動(dòng)的功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 自定義toast外形,多次點(diǎn)擊不會(huì)總是彈出toast的實(shí)現(xiàn)方法

    自定義toast外形,多次點(diǎn)擊不會(huì)總是彈出toast的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇自定義toast外形,多次點(diǎn)擊不會(huì)總是彈出toast的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Android 實(shí)現(xiàn)自己的LOG信息

    Android 實(shí)現(xiàn)自己的LOG信息

    本文主要講解Android LOG,這里對(duì)如何創(chuàng)建自己的Android LOG信息做了詳細(xì)的介紹,并附簡(jiǎn)單代碼示例,有需要的小伙伴可以參考下
    2016-08-08
  • Android使用Handler實(shí)現(xiàn)打地鼠游戲

    Android使用Handler實(shí)現(xiàn)打地鼠游戲

    這篇文章主要為大家詳細(xì)介紹了Android使用Handler實(shí)現(xiàn)打地鼠游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁(yè)按鈕方法

    Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁(yè)按鈕方法

    安卓的控件是挺多的,沒(méi)有辦法一個(gè)一個(gè)的來(lái)說(shuō)明,我們挑出了一些重點(diǎn)的控件,組成一些常見(jiàn)的布局,這樣以后在遇到相同功能的界面時(shí),就會(huì)有自己的思路,或者進(jìn)行復(fù)用
    2022-12-12
  • Android仿支付寶密碼輸入效果封裝

    Android仿支付寶密碼輸入效果封裝

    這篇文章主要為大家詳細(xì)介紹了Android仿支付寶密碼輸入效果的封裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android中使用Kotlin實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄界面

    Android中使用Kotlin實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄界面

    Kotlin 是一種在 Java 虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語(yǔ)言,被稱之為 Android 世界的Swift,由 JetBrains 設(shè)計(jì)開發(fā)并開源。接下來(lái)本文通過(guò)實(shí)例代碼給大家講解Android中使用Kotlin實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄界面,一起看看吧
    2017-09-09
  • 基于將Android工程做成jar包和資源文件的解決方法

    基于將Android工程做成jar包和資源文件的解決方法

    有時(shí)候,我們希望將我們的Android工程提供給第三方開發(fā)者使用。這個(gè)時(shí)候,最普遍的做法,就是提供一個(gè)jar包和一堆資源文件,第三方開發(fā)者可以將資源文件拷貝到Android工程的相應(yīng)目錄下,同時(shí)引用我們提供的jar包,就可以使用我們提供的相應(yīng)API了
    2013-05-05
  • Android UI組件LinearLayout線性布局詳解

    Android UI組件LinearLayout線性布局詳解

    這篇文章主要為大家詳細(xì)介紹了AndroidUI組件LinearLayout線性布局,具有一定的實(shí)用性,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評(píng)論