欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android啟動(dòng)廣播,android 自定義廣播

Android本地廣播的使用

為了解決廣播的安全性問(wèn)題,Android引入了本地廣播機(jī)制,使用該機(jī)制發(fā)出的廣播只能在應(yīng)用程序的內(nèi)部進(jìn)行傳遞,并且廣播接收器也只能接收來(lái)自本應(yīng)用程序發(fā)出的廣播。

創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供桃山企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為桃山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

本地廣播是無(wú)法通過(guò)靜態(tài)注冊(cè)的方式來(lái)接收的。我們知道靜態(tài)注冊(cè)主要是為了在程序未啟動(dòng)的情況下能接收廣播,而當(dāng)我們發(fā)送本地廣播的時(shí)候,程序肯定是已經(jīng)啟動(dòng)的了,所以我們需要?jiǎng)討B(tài)注冊(cè)方式創(chuàng)建接收器。

在這里我們創(chuàng)建一個(gè)繼承于BroadcastReceiver的類(lèi)LocalReceiver。onReceive()處理你接收到的廣播內(nèi)容,在這里我用Toast來(lái)創(chuàng)建一個(gè)提示接收到消息的彈窗

在activity_main.xml文件創(chuàng)建一個(gè)用于發(fā)送廣播的按鈕

首先通過(guò)本地廣播管理器LocalBroadcastManager的getInstance()方法獲取一個(gè)實(shí)例,并分別創(chuàng)建過(guò)濾器IntentFilter和自定義接收器LocalReceiver的實(shí)例。給IntentFilter的實(shí)例添加一個(gè)action:localbroadcast(接收的廣播的名稱(chēng)),然后調(diào)用LocalBroadcastManager的registerReceiver()方法進(jìn)行注冊(cè),并將LocalReceiver的實(shí)例和IntentFilter的實(shí)例都傳進(jìn)去。這樣本地監(jiān)聽(tīng)器就創(chuàng)建完成了。

調(diào)用LocalBroadcastManager的sendBroadcast()發(fā)送本地廣播。運(yùn)行程序,點(diǎn)擊Send Button按鈕,我們可以看到彈窗顯示“This is in LocalReceiver”,說(shuō)明本地廣播發(fā)送和接收成功了。

當(dāng)然,我們最后一定不要忘了取消注冊(cè)。我們可以通過(guò)調(diào)用unregisterReceiver()方法來(lái)實(shí)現(xiàn)。至此,Android的標(biāo)準(zhǔn)廣播發(fā)送就完成了。

1.發(fā)送的廣播只能在本程序內(nèi)傳遞,不必?fù)?dān)心數(shù)據(jù)泄露

2.其它程序廣播無(wú)法發(fā)送到本程序的內(nèi)部,不必?fù)?dān)心安全漏洞隱患

3.本地廣播比系統(tǒng)全局廣播更加高效

Android 使用廣播系統(tǒng)解決app開(kāi)機(jī)自啟動(dòng)問(wèn)題

關(guān)注 【網(wǎng)羅開(kāi)發(fā)】微信公眾號(hào),回復(fù)【160】便可領(lǐng)取。

網(wǎng)羅天下方法,方便你我開(kāi)發(fā) ,更多Android技術(shù)干貨等待領(lǐng)取,所有文檔會(huì)持續(xù)更新,歡迎關(guān)注一起成長(zhǎng)!

總結(jié)一下使用ACTION_BOOT_COMPLETED的廣播,解決app開(kāi)機(jī)自啟動(dòng)的問(wèn)題

1.首先在你的工程上建一個(gè)廣播接受的類(lèi),繼承BroadcastReceiver:

2.然后要在AndroidManifest.xml中加入權(quán)限和配置相關(guān)信息:

3.在application標(biāo)簽中,配置以下相關(guān)信息:

補(bǔ)充說(shuō)明:

1.查看系統(tǒng)中是否安裝了類(lèi)似360管家的軟件,為了加快開(kāi)機(jī)速度,默認(rèn)是關(guān)閉掉開(kāi)機(jī)廣播的,只需要在設(shè)置中打開(kāi)即可。

2.如果監(jiān)聽(tīng)不到廣播,可以嘗試同時(shí)監(jiān)聽(tīng)廣播和sd卡。

3.同時(shí)監(jiān)聽(tīng)廣播和sd卡,在application標(biāo)簽中,配置以下相關(guān)信息:

說(shuō)說(shuō)Android的廣播(1)

對(duì)于Activity的啟動(dòng)流程,我們已經(jīng)有了幾個(gè)版本的分析了。這里我們分析一個(gè)更容易一些的,四大組件中最簡(jiǎn)單的Broadcast Receiver。

關(guān)于Broadcast,有幾點(diǎn)需要了解。首先是廣播的類(lèi)型,然后是廣播的發(fā)送方法,最后是廣播是如何被接收的。這三者相輔相承的,比如普通廣播和有序廣播只有在詳細(xì)了解了廣播的接收過(guò)程了之后,才能真正明白它的含義。

普通的廣播是不在意順序的,最簡(jiǎn)單的理解是同時(shí)可以收到這個(gè)廣播。如果應(yīng)用是動(dòng)態(tài)注冊(cè)這個(gè)廣播的,且廣播發(fā)送時(shí)這個(gè)進(jìn)程還活著,那么當(dāng)然可以并發(fā)的把廣播盡快地傳送出去是最好的。

但是,如果是通過(guò)AndroidManifest.xml靜態(tài)注冊(cè)的情況,也就是說(shuō)這個(gè)廣播首先要把一個(gè)進(jìn)程啟動(dòng)起來(lái),這時(shí)并發(fā)啟動(dòng)很多進(jìn)程就是個(gè)問(wèn)題了。Android目前的做法是,對(duì)這種靜態(tài)的廣播接收者,自動(dòng)按有序廣播的方式來(lái)串行處理。但是這對(duì)應(yīng)用是透明的,應(yīng)用不能假設(shè)系統(tǒng)已經(jīng)把靜態(tài)的無(wú)序廣播當(dāng)成有序廣播來(lái)處理。

這個(gè)時(shí)候講粘性廣播有福了,因?yàn)閺腁ndroid 5.0(API 21)開(kāi)始,因?yàn)榘踩缘膯?wèn)題,官方已經(jīng)正式廢棄了粘性廣播。

Context類(lèi)提供兩個(gè)方法可以用于發(fā)送普通廣播:

差別是第二個(gè)設(shè)置權(quán)限。

發(fā)給特定的用戶(hù):

有序廣播因?yàn)橐幚硐⒌奶幚斫Y(jié)果,所以要復(fù)雜一些。

如果只是想讓廣播可以按優(yōu)先級(jí)來(lái)收取,并不在意處理的結(jié)果,可以用下面的版本:

同樣,在多用戶(hù)環(huán)境下,也可以選擇給哪個(gè)用戶(hù)發(fā)廣播:

不管是普通的還是有序的廣播都對(duì)應(yīng)有粘性的版本:

以上的API都是定義于Context類(lèi)中:

首先我們先看看發(fā)送端是如何發(fā)送的。

我們首先先放一個(gè)大圖,讓大家先有一個(gè)直觀的印象,不管普通廣播、有序廣播、粘性廣播如何組合,最終都匯集到一個(gè)大方法中。

我們先看應(yīng)用發(fā)送普通廣播的一個(gè)簡(jiǎn)單的例子:

非常簡(jiǎn)單,調(diào)用ContentWrapper的sendBroadcast方法就可以了。

然后我們順藤摸瓜就好了。

Activity中的sendBroadcast,實(shí)際上調(diào)用的是:

我們來(lái)看frameworks/base/core/java/android/content/ContextWrapper.java中對(duì)sendBroadcast的定義:

ContextWrapper只是一個(gè)包裝,真正的實(shí)現(xiàn)在ContextImpl中

我們來(lái)看/frameworks/base/core/java/android/app/ContextImpl.java中真正實(shí)現(xiàn)sendBroadcast的功能:

它會(huì)通過(guò)IPC去調(diào)用AMS的broadcastIntent。由于我們這個(gè)普通的廣播的方法參數(shù)最少,所以好多都是傳null。

加鎖,定參數(shù),然后調(diào)用真正的邏輯的實(shí)現(xiàn)。

我們先把broadcastIntentLocked的真正邏輯放一下,先看看有序廣播是如何發(fā)送的。

ContextWrapper.sendOrderedBroadcast

Context是abstract方法,調(diào)用的是ContextWrapper的實(shí)現(xiàn):

跟普通廣播一樣,還是會(huì)調(diào)用到ContextImpl.sendOrderedBroadcast

有序廣播調(diào)用broadcastIntent的區(qū)別在于serialized參數(shù),普通廣播為false,有序廣播為true.

原型為:

前面講過(guò)帶有回調(diào)的版本,我們看看它是如何實(shí)現(xiàn)的:

當(dāng)然還是調(diào)用ContextImpl.sendOrderedBroadcast

這次變成只是一個(gè)封裝了,它會(huì)調(diào)用一個(gè)更多參數(shù)的版本:

這次是一個(gè)全參數(shù)調(diào)用broadcastIntent的版本了,除了sticky就齊了

我們也不繞圈子了,直接看ContextImpl.sendStickyBroadcast.

分享題目:android啟動(dòng)廣播,android 自定義廣播
網(wǎng)頁(yè)地址:http://chinadenli.net/article48/dsgsehp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化全網(wǎng)營(yíng)銷(xiāo)推廣Google云服務(wù)器營(yíng)銷(xiāo)型網(wǎng)站建設(shè)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司