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

Android四大組件之BroadcastReceiver詳解

 更新時間:2019年01月29日 08:32:18   作者:*是杯酒漸濃*  
今天小編就為大家分享一篇關于Android四大組件之BroadcastReceiver詳解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

BroadcastReceiver(廣播接收器),在Android開發(fā)中,BroadcastReceiver的應用場景非常多,屬于Android四大組件之一。

Android 廣播分為兩個角色:廣播發(fā)送者、廣播接收者

一、 作用

用于監(jiān)聽 / 接收 應用發(fā)出的廣播消息,并做出響應

應用場景:

  • 不同組件之間通信(包括應用內 / 不同應用之間)
  • 與 Android 系統(tǒng)在特定情況下的通信(如當電話呼入時、網絡可用時)
  • 多線程通信

二、實現原理

Android中的廣播使用了設計模式中的觀察者模式:基于消息的發(fā)布/訂閱事件模型。

模型中有3個角色:

  • 消息訂閱者(廣播接收者)
  • 消息發(fā)布者(廣播發(fā)布者)
  • 消息中心(AMS,即Activity Manager Service)

廣播接收者通過 Binder機制在AMS注冊
廣播發(fā)送者通過 Binder 機制向AMS發(fā)送廣播
AMS根據廣播發(fā)送者要求,在已注冊列表中,尋找合適的廣播接收者(尋找依據:IntentFilter / Permission)
AMS將廣播發(fā)送到合適的廣播接收者相應的消息循環(huán)隊列中;
廣播接收者通過消息循環(huán)拿到此廣播,并回調 onReceive()

三、廣播接收器注冊

注冊的方式分為兩種:靜態(tài)注冊、動態(tài)注冊

靜態(tài)注冊

在AndroidManifest.xml里通過 標簽聲明

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

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

靜態(tài)注冊是常駐廣播,不受任何組件生命周期的影響

動態(tài)注冊

在代碼中通過調用Context的*registerReceiver()方法進行動態(tài)注冊BroadcastReceiver

@Override
protected void onResume() {
  super.onResume();
  //實例化BroadcastReceiver子類 & IntentFilter
  mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
  IntentFilter intentFilter = new IntentFilter();
  //設置接收廣播的類型
  intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);
  //調用Context的registerReceiver()方法進行動態(tài)注冊
  registerReceiver(mBroadcastReceiver, intentFilter);
}

注冊廣播后,要在相應位置記得銷毀廣播

即在onPause() 中unregisterReceiver(mBroadcastReceiver)

當此Activity實例化時,會動態(tài)將MyBroadcastReceiver注冊到系統(tǒng)中

當此Activity銷毀時,動態(tài)注冊的MyBroadcastReceiver將不再接收到相應的廣播。

@Override
protected void onPause() {
  super.onPause();
  //銷毀在onResume()方法中的廣播
  unregisterReceiver(mBroadcastReceiver);
}

注意:

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

原因:

對于動態(tài)廣播,有注冊就必然得有注銷,否則會導致內存泄露
重復注冊、重復注銷也不允許
動態(tài)注冊是非常駐廣播,靈活,跟隨組件的生命周期變化。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • 簡單介紹Android中Activity的四種啟動模式

    簡單介紹Android中Activity的四種啟動模式

    在Android中每個界面都是一個Activity,切換界面操作其實是多個不同Activity之間的實例化操作。本文給大家介紹Android中Activity的四種啟動模式,需要的朋友參考下吧
    2016-04-04
  • Android幀率監(jiān)測與優(yōu)化技巧

    Android幀率監(jiān)測與優(yōu)化技巧

    Android 應用的性能優(yōu)化是開發(fā)過程中至關重要的一環(huán),而幀率(Frame Rate)是評估應用性能的一個關鍵指標,在本文中,我們將深入探討如何監(jiān)測 Android 應用的幀率,以及如何通過代碼示例來優(yōu)化應用的性能,需要的朋友可以參考下
    2023-10-10
  • Android即時通訊設計(騰訊IM接入和WebSocket接入)

    Android即時通訊設計(騰訊IM接入和WebSocket接入)

    本文主要介紹了Android即時通訊設計(騰訊IM接入和WebSocket接入),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • android異步任務設計思詳解(AsyncTask)

    android異步任務設計思詳解(AsyncTask)

    AsyncTask在Android十分常用,那為什么如此常用呢,不用行不行呢,內部又是怎么實現的呢,為什么Java的API中沒有這個類呢,看完本文后,你將會知道答案
    2014-02-02
  • Android中Glide加載圓形圖片和圓角圖片實例代碼

    Android中Glide加載圓形圖片和圓角圖片實例代碼

    本篇文章主要介紹了Android中Glide加載圓形圖片和圓角圖片實例代碼,具體一定的參考價值,有興趣的可以了解一下
    2017-05-05
  • Android圖片處理實例分析

    Android圖片處理實例分析

    這篇文章主要介紹了Android圖片處理的方法,結合實例形式分析了Android針對圖片的加載、分割、縮放、繪制等操作技巧,需要的朋友可以參考下
    2016-08-08
  • 在Android中使用WebSocket實現消息通信的方法詳解

    在Android中使用WebSocket實現消息通信的方法詳解

    這篇文章主要介紹了在Android中使用WebSocket實現消息通信的方法詳解,消息推送功能可以說移動APP不可缺少的功能之一,使用WebSocket實現消息推送功能。感興趣的可以了解一下
    2020-07-07
  • android 支持的語言列表(匯總)

    android 支持的語言列表(匯總)

    本篇文章是對android支持的語言進行了部分匯總,需要的朋友參考下
    2013-06-06
  • Android 微信搖一搖功能實現詳細介紹

    Android 微信搖一搖功能實現詳細介紹

    這篇文章主要介紹了Android 微信搖一搖功能實現詳細介紹的相關資料,并附實例代碼及實現微信搖一搖的思路,需要的朋友可以參考下
    2016-11-11
  • Android實現類似iOS分欄控制器

    Android實現類似iOS分欄控制器

    這篇文章主要為大家詳細介紹了Android實現類似iOS分欄控制器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

井研县| 富川| 荔波县| 启东市| 云霄县| 上蔡县| 邮箱| 汨罗市| 朝阳县| 宣汉县| 义乌市| 清流县| 竹北市| 从江县| 全南县| 保亭| 石城县| 沙田区| 淳安县| 昌江| 广平县| 花莲县| 新乡县| 兴宁市| 奉新县| 临夏市| 舟曲县| 皮山县| 肥乡县| 永清县| 大名县| 徐水县| 澄迈县| 祁东县| 化隆| 吉隆县| 修水县| 新巴尔虎右旗| 五台县| 峨山| 巧家县|