android广播 有序 无序,Android全局广播(无序,有序)
寫這篇文章的原因:
最近博主在帶兩個小白學(xué)Android,在教廣播的過程中發(fā)現(xiàn)了一些問題
大概如下:
1.Android8.0以上廣播需要動態(tài)注冊 (靜態(tài)注冊無效)
2.Android8.0以上兩個應(yīng)用間按照以前的操作發(fā)送廣播后在另一個沒辦法接收到廣播的情況
3.出現(xiàn)了廣播接收者的搶先或重復(fù)問題
在文章最后會有解決辦法!!!!
首先還是按照Android8.0以下來介紹一下廣播
一.無序廣播:啟動方式------>Context.sendBroadcast() (異步)
所有的receivers(接收器)的執(zhí)行順序不確定,因此所有的receivers(接收器)接收broadcast的順序不確定。
這種方式效率更高,但是BroadcastReceiver無法使用setResult系列、getResult系列及abort(中止)系列API
下面是簡單操作:(以解屏,鎖屏為例)
1.定義一個廣播類
2.對廣播進(jìn)行注冊(靜態(tài)或者動態(tài))
靜態(tài):AndroidMainFest中的application標(biāo)簽下加上receiver的子標(biāo)簽(此注釋只是一種比喻!!)
動態(tài):
3.如果是監(jiān)聽的網(wǎng)絡(luò)等其他,記得要加權(quán)限
以上是系統(tǒng)的,下面介紹下廣播發(fā)送者發(fā)送自定義廣播------>sendBroadcast()
二.有序廣播 啟動方式------>sendOrderedBroadcast()
里面兩個參數(shù)的就不寫了
至于優(yōu)先級(-1000到1000)的值 —>值越大越先接收到廣播
靜態(tài):設(shè)置intent-fliter的中Priority
動態(tài):直接調(diào)用intentFilter.setPriority();
與無序廣播的區(qū)別(主要是兩個方法)
1.setResultData() 修改廣播中發(fā)送的對象
2.aboryBroadcast() 攔截廣播
解決文章開始的問題:
1.Android8.0以上兩個應(yīng)用間按照以前的操作發(fā)送廣播后在另一個沒辦法接收到廣播的情況
解決辦法:在發(fā)送廣播的時候調(diào)用setPackage()方法,放入另一個應(yīng)用的包名(另一個應(yīng)用中注冊文件package)
2.出現(xiàn)了廣播接收者的搶先或重復(fù)問題
解決辦法:靜態(tài)注冊和動態(tài)注冊,不可同時存在,兩者選其一
本文同步分享在 博客“計蒙不吃魚”(CSDN)。
如有侵權(quán),請聯(lián)系 support@oschina.cn 刪除。
本文參與“OSC源創(chuàng)計劃”,歡迎正在閱讀的你也加入,一起分享。
總結(jié)
以上是生活随笔為你收集整理的android广播 有序 无序,Android全局广播(无序,有序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闭关修炼21天,“啃完”283页pdf,
- 下一篇: 360 android系统 流量,360