国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Android中的Intent詳細(xì)講解
Android中的Intent詳細(xì)講解 收藏
  在一個(gè)Android應(yīng)用中,主要是由四種組件組成的,這四種組件可參考“Android應(yīng)用的構(gòu)成”。
  而這四種組件是獨(dú)立的,它們之間可以互相調(diào)用,協(xié)調(diào)工作,最終組成一個(gè)真正的Android應(yīng)用。
  在這些組件之間的通訊中,主要是由Intent協(xié)助完成的。Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。
  因此,Intent在這里起著一個(gè)媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。
  例如,在一個(gè)聯(lián)系人維護(hù)的應(yīng)用中,當(dāng)我們?cè)谝粋€(gè)聯(lián)系人列表屏幕(假設(shè)對(duì)應(yīng)的Activity為listActivity)上,點(diǎn)擊某個(gè)聯(lián)系人后,希望能夠跳出此聯(lián)系人的詳細(xì)信息屏幕(假設(shè)對(duì)應(yīng)的Activity為detailActivity)。為了實(shí)現(xiàn)這個(gè)目的,listActivity需要構(gòu)造一個(gè) Intent,這個(gè)Intent用于告訴系統(tǒng),我們要做“查看”動(dòng)作,此動(dòng)作對(duì)應(yīng)的查看對(duì)象是“某聯(lián)系人”,然后調(diào)用startActivity (Intent intent),將構(gòu)造的Intent傳入,系統(tǒng)會(huì)根據(jù)此Intent中的描述,到ManiFest中找到滿足此Intent要求的Activity,系統(tǒng)會(huì)調(diào)用找到的 Activity,即為detailActivity,最終傳入Intent,detailActivity則會(huì)根據(jù)此Intent中的描述,執(zhí)行相應(yīng)的操作。
  一、抽象描述要描述什么
  在Android參考文檔中,對(duì)Intent的定義是執(zhí)行某操作的一個(gè)抽象描述(確實(shí)很抽象)。我們先來(lái)看看這里的抽象描述,到底描述了什么。
  首先,是要執(zhí)行的動(dòng)作(action)的一個(gè)簡(jiǎn)要描述,如VIEW_ACTION(查看)、EDIT_ACTION(修改)等,Android為我們定義了一套標(biāo)準(zhǔn)動(dòng)作:
代碼:
MAIN_ACTION
VIEW_ACTION
EDIT_ACTION
PICK_ACTION
GET_CONTENT_ACTION
DIAL_ACTION
CALL_ACTION
SENDTO_ACTION
ANSWER_ACTION
INSERT_ACTION
DELETE_ACTION
RUN_ACTION
LOGIN_ACTION
CLEAR_CREDENTIALS_ACTION
SYNC_ACTION
PICK_ACTIVITY_ACTION
WEB_SEARCH_ACTION
  此外,我們還可以根據(jù)應(yīng)用的需要,定義我們自己的動(dòng)作,并可定義相應(yīng)的Activity來(lái)處理我們的自定義動(dòng)作。
        其次,是執(zhí)行動(dòng)作要操作的數(shù)據(jù)(data),Android中采用指向數(shù)據(jù)的一個(gè)URI來(lái)表示,如在聯(lián)系人應(yīng)用中,一個(gè)指向某聯(lián)系人的URI可能為:content://contacts/1。這種URI表示,通過(guò) ContentURI這個(gè)類來(lái)描述,具體可以參考android.net.ContentURI類的文檔。
        以聯(lián)系人應(yīng)用為例,以下是一些action / data對(duì),及其它們要表達(dá)的意圖:
代碼:
VIEW_ACTION content://contacts/1-- 顯示標(biāo)識(shí)符為"1"的聯(lián)系人的詳細(xì)信息
EDIT_ACTION content://contacts/1-- 編輯標(biāo)識(shí)符為"1"的聯(lián)系人的詳細(xì)信息
VIEW_ACTION content://contacts/-- 顯示所有聯(lián)系人的列表
PICK_ACTION content://contacts/-- 顯示所有聯(lián)系人的列表,并且允許用戶在列表中選擇一個(gè)聯(lián)系人,然后把這個(gè)聯(lián)系人返回給父activity。例如:電子郵件客戶端可以使用這個(gè)Intent,要求用戶在聯(lián)系人列表中選擇一個(gè)聯(lián)系人
        另外,除了action和data這兩個(gè)重要屬性外,還有一些附加屬性:
  category(類別),被執(zhí)行動(dòng)作的附加信息。例如 LAUNCHER_CATEGORY 表示Intent 的接受者應(yīng)該在Launcher中作為頂級(jí)應(yīng)用出現(xiàn);而ALTERNATIVE_CATEGORY表示當(dāng)前的Intent是一系列的可選動(dòng)作中的一個(gè),這些動(dòng)作可以在同一塊數(shù)據(jù)上執(zhí)行。
  type(數(shù)據(jù)類型),顯式指定Intent的數(shù)據(jù)類型(MIME)。一般Intent的數(shù)據(jù)類型能夠根據(jù)數(shù)據(jù)本身進(jìn)行判定,但是通過(guò)設(shè)置這個(gè)屬性,可以強(qiáng)制采用顯式指定的類型而不再進(jìn)行推導(dǎo)。
  component(組件),指定Intent的的目標(biāo)組件的類名稱。通常 Android會(huì)根據(jù)Intent 中包含的其它屬性的信息,比如action、data/type、category進(jìn)行查找,最終找到一個(gè)與之匹配的目標(biāo)組件。但是,如果 component這個(gè)屬性有指定的話,將直接使用它指定的組件,而不再執(zhí)行上述查找過(guò)程。指定了這個(gè)屬性以后,Intent的其它所有屬性都是可選的。
  extras(附加信息),是其它所有附加信息的集合。使用extras可以為組件提供擴(kuò)展信息,比如,如果要執(zhí)行“發(fā)送電子郵件”這個(gè)動(dòng)作,可以將電子郵件的標(biāo)題、正文等保存在extras里,傳給電子郵件發(fā)送組件。
  總之, action、 data/type、category和extras 一起形成了一種語(yǔ)言。
  這種語(yǔ)言使系統(tǒng)能夠理解諸如“查看某聯(lián)系人的詳細(xì)信息”之類的短語(yǔ)。
  隨著應(yīng)用不斷的加入到系統(tǒng)中,它們可以添加新的action、 data/type、category來(lái)擴(kuò)展這種語(yǔ)言。
  應(yīng)用也可以提供自己的Activity來(lái)處理已經(jīng)存在的這樣的“短語(yǔ)”,從而改變這些“短語(yǔ)”的行為。
二、Android如何解析Intent
  在應(yīng)用中,我們可以以兩種形式來(lái)使用Intent:
  直接Intent:指定了component屬性的Intent(調(diào)用setComponent(ComponentName)或者setClass(Context, Class)來(lái)指定)。通過(guò)指定具體的組件類,通知應(yīng)用啟動(dòng)對(duì)應(yīng)的組件。
  間接Intent:沒有指定comonent屬性的Intent。這些Intent需要包含足夠的信息,這樣系統(tǒng)才能根據(jù)這些信息,在在所有的可用組件中,確定滿足此Intent的組件。
  對(duì)于直接Intent,Android不需要去做解析,因?yàn)槟繕?biāo)組件已經(jīng)很明確,Android需要解析的是那些間接Intent,通過(guò)解析,將 Intent映射給可以處理此Intent的Activity、IntentReceiver或Service。
 Intent解析機(jī)制主要是通過(guò)查找已注冊(cè)在AndroidManifest.xml中的所有IntentFilter及其中定義的Intent,最終找到匹配的Intent。在這個(gè)解析過(guò)程中,Android是通過(guò)Intent的action、type、category這三個(gè)屬性來(lái)進(jìn)行判斷的,判斷方法如下:
  如果Intent指明定了action,則目標(biāo)組件的IntentFilter的action列表中就必須包含有這個(gè)action,否則不能匹配;
  如果Intent沒有提供type,系統(tǒng)將從data中得到數(shù)據(jù)類型。和action一樣,目標(biāo)組件的數(shù)據(jù)類型列表中必須包含Intent的數(shù)據(jù)類型,否則不能匹配。
  如果Intent中的數(shù)據(jù)不是content: 類型的URI,而且Intent也沒有明確指定它的type,將根據(jù)Intent中數(shù)據(jù)的scheme (比如 http: 或者mailto: ) 進(jìn)行匹配。同上,Intent 的scheme必須出現(xiàn)在目標(biāo)組件的scheme列表中。
  如果Intent指定了一個(gè)或多個(gè)category,這些類別必須全部出現(xiàn)在組建的類別列表中。比如Intent中包含了兩個(gè)類別:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目標(biāo)組件必須至少包含這兩個(gè)類別。
  三、應(yīng)用例子
  以下,以Android SDK中的便箋例子來(lái)說(shuō)明,Intent如何定義及如何被解析。這個(gè)應(yīng)用可以讓用戶瀏覽便箋列表、查看每一個(gè)便箋的詳細(xì)信息。
  xml 代碼
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android Intent和Intent Filter詳解(五)
Android實(shí)例剖析筆記(一)
關(guān)于Android隱式啟動(dòng)Activity的分析和說(shuō)明
android體系架構(gòu)
android Intent機(jī)制詳解
Android開發(fā)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服