sendBroadcast與sendStickyBroadcast的區別


前提條件:此處我主要討論兩種廣播在代碼中動態注冊時的一些細節問題。

正常情況下,廣播通常都是執行一次注冊代碼,就會觸發各接收器接收一次,無論是在onCreate里注冊還是onResume里注冊:若在onCreate里注冊,一般我們在onDestroy中進行注銷;若在onResume里注冊,一般我們在onPause里進行注銷。

sendBroadcast為普通廣播,若是動態注冊的話:

只有先注冊再發送廣播,發送出來的intent才可以被接收器接收到,并執行接收器對象中的onReceive方法;若廣播先發出來,再注冊,廣播先前發出來的intent是無法被接收器接收到的,也無法執行其onReceive方法。

sendStickyBroadcast廣播,若是動態注冊的話:

與sendBroadcast不同的是,sendStickyBroadcast無論是先注冊再發送還是先發送再注冊,發送出來的intent均可以被接收器接收到。當然你在使用sendStickyBroadcast廣播時,首先需要在manifest.xml文件中配置此類型廣播權限<uses-permissionandroid:name="android.permission.BROADCAST_STICKY"/>。

具體說明如下:

1、 在注冊之前廣播就發送出來了的intent會被緩存在內存中,待廣播一旦注冊該intent就會被接收器接收,并執行onReceive方法;

2、 若注冊之后廣播發送出來,觸發接收器接收intent,接收器首先會去檢索系統緩存中是否存在intent對象,若系統中不存在緩存的intent,廣播intent發送過來時,系統會先將其保留到緩存中,接收器會接收當前的intent;若系統中已存在緩存的intent,則接收器首先會接收緩存中保存的intent,再接著接收當前發送過來的intent,即此時會執行兩次廣播接收器onReceive方法,為避免重復執行廣播接收器,可以在onReceive方法中調用removeStickyBroadcast(intent)方法,將緩存中的intent移除。這樣下次接收器檢索不到緩存中的intent,就直接接收廣播發送過來的intent;

3、 若當前廣播為sendStickyBroadcast,然后代碼中改為普通廣播,這時緩存中保存的intent依然會被接收器接收,再接收當前發送過來的intent,效果和sendStickyBroadcast一樣,哪怕清除應用本身的數據也還是如此,緩存中的intent對象依然存在。另一種現象是此時若先發送普通廣播,再注冊,此時普通廣播的接收器雖然接收不到發送過來的廣播,但可以接收到先前使用sendStickyBroadcast廣播時緩存中的intent,當然這種奇異現象只會出現在調試代碼的情況下,是不會出現在應用本身的執行過程中。該緩存中的intent對象只有在重啟手機的情況下才會被銷毀或者當內存不足,系統自動銷毀。

4、 緩存中的intent對象對應不同的action,若通過sendStickyBroadcast發送廣播設置不同的action值,將會在系統中分別對不同的action緩存不同的intent對象;即,若設置StickyBroadcast的action為A,則發送廣播后會在系統中緩存一個對應的intentA對象,若設置StickyBroadcast的action為B,則發送廣播后會在系統中緩存一個對應的intentB對象;這些緩存中的intent對象只有在重啟手機的情況下才會被銷毀或者當內存不足,系統自動銷毀。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 線程池 初始大小_為什么tomcat的默認線程池大小如此之大? - java

我注意到默認的tomcat 7線程池大小似乎是200。但是普通的CPU似乎有16個內核。因此只能并行執行16個線程為什么tomcat使用那么多線程。參考方案多年以來&#xff0c;許多單核計算機問世&#xff0c;并且能夠以“偽并行”模式運行功能&#xff0c;也就是說&#xff0c;您可能有16…

Hadoop2.6.0完全分布式安裝

1、修改主機名稱 對master/slave1/slave2同時配置為Master/Slave1/Slave2 masterMaster:~$ sudo gedit /etc/hostname 上述3個虛機結點均需要進行以上步驟 2、填寫主機IP 對master/slave1/slave2同時配置 masterMaster:~$ sudo gedit /etc/hosts 192.168.48.128 master192.168.…

DEX加密效果分析

dex加密目的&#xff1a;保護安卓應用的Java源代碼&#xff0c;避免被惡意分析&#xff0c;技術被竊取準備工具&#xff1a;1、apktool &#xff1a;反編譯apk&#xff0c;提取smali代碼2、dex2jar &#xff1a;將dex轉化為jar文件3、jd-gui &#xff1a;查看jar文件&#xff0…

一些比特率值

比特率 比特率是指將數字聲音由模擬格式轉化成數字格式的采樣率&#xff0c;采樣率越高&#xff0c;還原后的音質就越好。 比特率值與現實音頻對照&#xff1a; 16KBPS電話音質 24KBPS增加電話音質、短波廣播、長波廣播、歐洲制式中波廣播40KBPS美國制式中波廣播56KBPS話…

java asynccontext,超時后的JavaEE 6 AsyncContext行為

What is the exact behavior of AsyncContext after it times out? Does it still run and does it return response using getResponse()?解決方案Java Servlet 3.0 Maintenance Release on page 34 reads:A call to this method - ServletRequest.startAsync(ServletReques…

BZOJ1857:[SCOI2010]傳送帶——題解

http://www.lydsy.com/JudgeOnline/problem.php?id1857 Description 在一個2維平面上有兩條傳送帶&#xff0c;每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段AB和線段CD。lxhgww在AB上的移動速度為P&#xff0c;在CD上的移動速度為Q&#xff0c;在平面上的移動速度R。…

mnt/sdcard和storage/sdcard的區別

/mnt 目錄&#xff0c;熟悉linux的人都清楚&#xff0c;linux默認掛載外部設備都會掛到這個目錄下面去&#xff0c;如將sd卡掛載上去后&#xff0c;會生成一個/mnt/sdcard 目錄。 storage/sdcard 目錄&#xff0c;這是一個軟鏈接&#xff08;相當于windows的文件夾的快捷方式&a…

kd樹的原理

kd樹就是一種對k維空間中的實例點進行存儲以便對其進行快速檢索的樹形數據結構&#xff0c;可以運用在k近鄰法中&#xff0c;實現快速k近鄰搜索。構造kd樹相當于不斷地用垂直于坐標軸的超平面將k維空間切分。 ?? 假設數據集\(T\)的大小是\(m*n\),即\(T{x_1,x_2,...x_m}\),其中…

應聘華為的朋友小心了,應聘華為的悲慘遭遇!

以下內容全部真實&#xff0c;為本人親身經歷。可隨時進行當面對質。 本人女朋友&#xff0c;原本是西安一家企業里面的行政助理&#xff0c;工作比較穩定&#xff0c;收入不高&#xff0c;但也基本夠她用了。 一天&#xff0c;我的一個同學&#xff08;華為員工&#xff09;說…

力軟 java主從表保存_JAVA常用知識總結(十二)——數據庫(二)

MySQL主從熱備份工作原理簡單的說&#xff1a;就是主服務器上執行過的sql語句會保存在binLog里面&#xff0c;別的從服務器把他同步過來&#xff0c;然后重復執行一遍&#xff0c;那么它們就能一直同步啦。整體上來說&#xff0c;復制有3個步驟&#xff1a;作為主服務器的Maste…

HttpClient和DefaultHttpClient

HttpClient 是接口&#xff0c;DefaultHttpClient是實現這個接口的子類 public interface HttpClient {/*** Obtains the parameters for this client.* These parameters will become defaults for all requests being* executed with this client, and for the parameters of…

Go語言版黑白棋

1、游戲說明2、無邊框窗口實現3、背景圖、最小化、關閉窗口4、界面其它設計5、黑白子提示閃爍效果6、落子7、初始化棋子、改變角色8、倒計時9、吃子10、棋子個數統計、勝負判斷11、機器落子 轉載于:https://www.cnblogs.com/tennysonsky/p/8442827.html

vue使用render渲染jsx

vue&jsx文檔 vue實例屬性 // App.ts import hBtn from ./components/hBtn import hUl from ./components/hUlexport default {data(){return {theme: "mdui-theme-pink",accent: "mdui-theme-accent-pink",users:[aoo, boo, coo]}},methods:{},render(…

java中的多線程有什么意義_Java多線程與并發面試題(小結)

1&#xff0c;什么是線程&#xff1f;線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位。程序員可以通過它進行多處理器編程&#xff0c;你可以使用多線程對運算密集型任務提速。比如&#xff0c;如果一個線程完成一…

IT必須掌握的常用命令

一&#xff0c;ping      它是用來檢查網絡是否通暢或者網絡連接速度的命令。作為一個生活在網絡上的管理員或者黑客來說&#xff0c;ping命令是第一個必須掌握的DOS命令&#xff0c;它所利用的原理是這樣的&#xff1a;網絡上的機器都有唯一確定的IP地址&#xff0c;我們…

Callable類

&#xff08;一&#xff09; Callable和Runnable比較相似&#xff0c;都可以用來實現線程任務。但callable使用了泛型設計&#xff0c;使用一個V類型值&#xff0c;能夠 在執行結束后返回一個V類型的值。而Runable只會返回一個void&#xff0c;不能夠獲得執行的結果。 &#x…

Java——線程的創建,線程池

線程 多線程就是一個程序中有多個線程在同時執行。 多線程下CPU的工作原理 實際上&#xff0c;CPU(中央處理器)使用搶占式調度模式在多個線程間進行著高速的切換。對于CPU的一個核而言&#xff0c;某個時刻&#xff0c;只能執行一個線程&#xff0c;而CPU的在多個線程間切換速度…

初級第一旬05— 藍字觀試題

準提法網絡佛學院 準提法教學平臺 一、高七師提倡初學準提法者&#xff0c;應先觀藍字&#xff0c;在《顯密圓通成佛心要集》中有依據嗎&#xff1f; 二、正修的時候&#xff0c;如果不得不中斷怎么辦&#xff1f; 三、藍字觀有幾種手印&#xff1f;可以單獨使用嗎&#xff1f;…

java并查集找朋友圈_圖—并查集(解決朋友圈問題)

圖也是一種 非線性結構&#xff0c;是由多個頂點組成的關系集合組成的一種數據結構。圖可以分為兩種&#xff0c;無向圖和有向圖。★圖的定義:★典型問題&#xff1a;利用圖能夠解決很多問題&#xff0c;這里有一個較為典型的問題&#xff0c;假如已知有n個人和m對好友關系(存于…

技術這東西,不可不看,不可全看.

最近忙著玩開心,好久沒來CSDN了,首頁上有90后程序員的消息了,稍微感慨一下,曾幾何時,自己這個80后還被70后的前輩所笑話,轉眼就成了5年經驗的老油條了.呵呵. 5年,個人認為經歷還是有些代表性的,就跟剛入行或者即將入行的哥們交個底吧,這5年到底學到了什么. 如果你看完這篇文…