精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

徹底認(rèn)識(shí)PendingIntent

最近在寫一個(gè)鬧鐘程序的時(shí)候使用到了 PendingIntent, 而且是兩個(gè)地方用到,一個(gè)是 AlarmManager 定時(shí)的時(shí)候, 另一個(gè)是在點(diǎn)擊通知進(jìn)入應(yīng)用的時(shí)候。其實(shí)我早就想深入研究一下 PendingIntent 了,因?yàn)槲液芎闷嬉幌聨讉€(gè)問(wèn)題:

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)拜城,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220

  1. 已經(jīng)有了 Intent, 為什么還有 PendingIntent?
  2. PendingIntent 也就幾個(gè)場(chǎng)景用到過(guò),還有其他場(chǎng)景嗎?
  3. 它的內(nèi)部實(shí)現(xiàn)。

Intent 和 PendingIntent 的區(qū)別

Intent

Intent 是意圖的意思。Android 中的 Intent 正是取自這個(gè)意思,它是一個(gè)消息對(duì)象,通過(guò)它,Android 系統(tǒng)的四大組件能夠方便的通信,并且保證解耦。

Intent 可以說(shuō)明某種意圖,攜帶一種行為和相應(yīng)的數(shù)據(jù),發(fā)送到目標(biāo)組件。

IntentFilter 與 Intent 配套使用,它聲明了一個(gè)組件接受某個(gè) Intent。

PendingIntent

PendingIntent 是對(duì) Intent 的封裝,關(guān)鍵的不同在于:

A組件 創(chuàng)建了一個(gè) PendingIntent 的對(duì)象然后傳給 B組件,B 在執(zhí)行這個(gè) PendingIntent 的 send 時(shí)候,它里面的 Intent 會(huì)被發(fā)送出去,而接受到這個(gè) Intent 的 C 組件會(huì)認(rèn)為是 A 發(fā)的。

B 以 A 的權(quán)限和身份發(fā)送了這個(gè) Intent。

比如,我們的 Activity 如果設(shè)置了 exported = false,其他應(yīng)用如果使用 Intent 就訪問(wèn)不到這個(gè) Activity,但是使用 PendingIntent 是可以的。

綜上所述,PendingIntent 有兩個(gè)特點(diǎn):

  1. 將某個(gè)動(dòng)作的觸發(fā)時(shí)機(jī)交給其他應(yīng)用
  2. 讓那個(gè)應(yīng)用代表自己去執(zhí)行那個(gè)動(dòng)作(權(quán)限都給他了)

API

獲取 PendingIntent

  1. getActivity
  2. getActivities
  3. getBroadcast
  4. getService
  5. getForegroundService

為什么沒(méi)有 getContentProvider?
我猜測(cè),ContentProvider 作為一個(gè)數(shù)據(jù)源,太重要了,相當(dāng)于是把數(shù)據(jù)直接暴露出去了

它們的參數(shù)都相同,都是四個(gè):Context, requestCode, Intent, flags。Context 不必多說(shuō),要想讓其他組件代替自己辦事,當(dāng)然要將自己的上下文傳給它。action, requestCode 和 Intent 共同來(lái)標(biāo)志一個(gè)行為的唯一性,什么意思呢?

簡(jiǎn)單的說(shuō),我們通過(guò)相同的方法(action), 相同的 requestCode 和相同的 Intent 獲取到的 PendingIntent, 雖然可能不是同一個(gè)對(duì)象,但是,卻是代表同一個(gè)東西,之所以這樣看 flags 參數(shù)就知道了。

FLAG_ONE_SHOT: 只執(zhí)行一次, 在調(diào)用了 send 以后自動(dòng)調(diào)用 cancel,不能在調(diào)用 send 了。
FLAG_NO_CREATE: 不創(chuàng)建新的,如果我們之前設(shè)置過(guò),這次就能獲取到,否則,返回 null。
FLAG_CANCEL_CURRENT: 如果之前設(shè)置過(guò),就取消掉, 重新創(chuàng)建個(gè)新的
FLAG_UPDATE_CURRENT: 如果之前設(shè)置過(guò),就更新它。更新什么呢,Intent 的 Extras
FLAG_IMMUTABLE: 設(shè)置 Intent 在 send 的時(shí)候不能更改

發(fā)送 PendingIntent

send 是觸發(fā) PendingIntent 包含的行為,它有很多重載形式,我們通常的開發(fā)用不到他,除非我們做桌面程序開發(fā)或者 Android Framework 開發(fā)。
這里我們只是大體說(shuō)明一下,可以傳給它一個(gè) Intent 來(lái)對(duì)它原來(lái)的 Intent 做修改,但是如果目標(biāo)設(shè)置了 FLAG_IMMUTABLE 則給參數(shù)忽略。可以設(shè)置 callback 當(dāng)發(fā)送完成獲得回調(diào),并且可以通過(guò)設(shè)置handler決定回調(diào)發(fā)生的線程。

取消 PendingIntent

只有設(shè)置 PendingIntent 的原來(lái)的應(yīng)用可以取消它,發(fā)送方只能發(fā)送,當(dāng)一個(gè) PendingIntent 被取消后,發(fā)送則不會(huì)成功。

PendingIntent 的使用場(chǎng)景

已知的使用場(chǎng)景是:

  1. 通知,在點(diǎn)擊通知時(shí)執(zhí)行調(diào)起本應(yīng)用的操作,當(dāng)然也可以執(zhí)行其他操作
  2. 鬧鐘,定時(shí)執(zhí)行某個(gè)操作
  3. 桌面小部件,點(diǎn)擊小部件時(shí)執(zhí)行某個(gè)操作

通知,鬧鐘,桌面小部件,都是運(yùn)行在其他應(yīng)用中的,但是給我們的感知就像是我們自己的應(yīng)用的一部分。

內(nèi)部實(shí)現(xiàn)

大體的原理是: A應(yīng)用希望讓B應(yīng)用幫忙觸發(fā)一個(gè)行為,這是跨應(yīng)用的通信,需要 Android 系統(tǒng)作為中間人,這里的中間人就是 ActivityManager。 A應(yīng)用創(chuàng)建建 PendingIntent,在創(chuàng)建 PendingIntent 的過(guò)程中,向 ActivityManager 注冊(cè)了這個(gè) PendingIntent,所以,即使A應(yīng)用死了,當(dāng)它再次蘇醒時(shí),只要提供相同的參數(shù),還是可以獲取到之前那個(gè) PendingIntent 的。當(dāng) A 將 PendingIntent 調(diào)用系統(tǒng) API 比如 AlarmManager.set(),實(shí)際是將權(quán)限給了B應(yīng)用,這時(shí)候, B應(yīng)用可以根據(jù)參數(shù)信息,來(lái)從 ActivityManager 獲取到 A 設(shè)置的 PendingIntent。


匹配 PendingIntent 相同時(shí),需要匹配 Intent 相同,Intent 如何匹配相同的?


文章標(biāo)題:徹底認(rèn)識(shí)PendingIntent
網(wǎng)頁(yè)地址:http://m.jcarcd.cn/article/iisieh.html
主站蜘蛛池模板: 动漫国产在线精品一 | 国产乱子伦露脸在线 | 午夜日韩免费视频 | 成人h视频在线观看 | 中文字幕观看 | 国产玉足脚交 | 日本欧美国产一区 | 精品福利片在线观看 | 成人品观看免费 | 国产91精品在线 | 欧美专区日韩在线 | 区三区影院视频 | 国产欧美日韩专区 | www.五月天激情 | 日韩AⅤ在线观看 | 国产热の有码 | 中文字幕欧美 | 日本午夜福利剧场 | 91小视频在线观看 | 韩国美女一区二区 | 日韩欧美一二区 | 欧美在线精品 | 无码精品人妻一区二区三区中 | 国产在线观看黄丝袜 | 日本成人一区 | 欧美日韩国产a区 | 午夜欧美在线 | 国产精品自产拍高 | 片午夜在线观看 | 成人中文字幕在线 | 国内国外精品一区二 | 午夜福利91| 欧美一级在线观 | 中文字字幕| 日本中文一二区 | 国产盗摄视频在线 | 精品国产精品 | 日韩在线观看 | 九七电影网在线 | 国产精品亚洲给色区 | 成人午夜影片 |