日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈BroadcastReceiver

發布時間:2025/4/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈BroadcastReceiver 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在安卓開發中,broadcast是一種APP直接傳輸信息的機制。它是對廣播進行過濾并接受響應的一類組件。它可以運用于接收廣播intent,廣播intent發送通過調用sendbroadcast/sendorderedBroadcast來實現。通常一個廣播intent可以被訂閱此intent的多個廣播接收者所接收。

?比如我靜態注冊一個SDcardunmountedreceiver的廣播代碼如下:

在清單文件中聲明<receiver>,需要在其中配置<intent--filter>指定接收廣播的動作action

或者動態注冊,在JAVA代碼中注冊:

兩種注冊的區別:代碼注冊也就是動態注冊,它不是一個常駐的廣播,也就是說他的廣播是跟隨著程序的生命周期,一旦代碼所在進程被殺死,廣播接收者就失效。而在清單文件中注冊的靜態廣播是常駐型,在當應用程序關閉后,如果有信息廣播來,程序也會被系統調用自動運行。在平時我們手機中,需要啟動一次才能接受到廣播,它才會生效。


安卓中常見的廣播

監聽撥打電話廣播




監聽系統開機的廣播,監聽安裝和卸載程序的廣播,攔截短信等。

發送自定義廣播

無序廣播不可以被攔截,所有接收無序廣播的廣播接收者在此廣播被發送時均能接收此廣播,并且是同時接收。無序廣播使用sendbroadcast方法來發送,核心代碼如下:


這個intent的action可以是自定義的動作。那么接收者也要定義發送廣播的意圖動作。

注意:符合某廣播條件的所有廣播接收者的特點:無序、無優先級、不可中斷、不可傳遞數據。

? ?廣播時可設置接收者權限,僅當接收者含有權限才能接收。

? ?接收者的<receiver>也可以設置發送方權限,只接收含有權限應用的廣播Receiver節點屬性

? ?發送廣播是,通過intent.setFlag(intent.flag_include_stopped_packeages),包含從未啟動過的程序,這樣的設置,可以讓從未啟動的接收者也收到廣播。

有序廣播

有序廣播可以被攔截或者添加數據,優先級高的接收者可以攔截低優先級,使用abortBroadcast,添加數據:通過bundle傳遞。前面的接收者可以將數據通過setResultExtras(Bundle)方法存進結果對象,然后傳遞給下一個接收者,下一個接收者通過代碼:Bundle bundle = getResultExtras(true)可以獲取上一個接收者存入在結果對象中的數據。

谷歌規定的優先級是1000~~負1000,系統默認優先級是0。


粘性廣播(sendstickBroadcast),號稱是陰魂不散的廣播,它會一直等待intent指定的事件處理完畢才會消失。他需要API的權限BROADCAST_STICKY。它不會像普通廣播那樣10秒鐘以后就會被干掉。

注意一些細節問題:

1.廣播接收者的生命周期是非常短暫的,在接收到廣播的時候創建,onReceive()方法結束之后銷毀
2.廣播接收者中不要做一些耗時的工作,否則會彈出Application No Response錯誤對話框
3.最好也不要在廣播接收者中創建子線程做耗時的工作,因為廣播接收者被銷毀后進程就成為了空進程,很容易被系統殺掉
4.耗時的較長的工作最好放在服務中完成






總結

以上是生活随笔為你收集整理的浅谈BroadcastReceiver的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。