溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android Intent詳解

發(fā)布時間:2020-04-06 17:00:21 來源:網(wǎng)絡(luò) 閱讀:628 作者:恐龍ID 欄目:移動開發(fā)

    (一)概念:Intent簡單來說就是啟動或切換Activity, Service或Broadcast三大組件的。Intent使應(yīng)用程序代碼在運(yùn)行時動態(tài)綁定成為可能,大大降低了不同代碼之間的耦合性。Intent最常用的方法是用來啟動一個Activity。Intent封裝了一系列他要執(zhí)行的動作屬性,常見的有Action,Data,Type, Category, Extras。

    a: Action, Action屬性要完成的只是一個抽象的動作,這個動作具體由哪個組件(Activity或BroadcaseReceiver)來完成,Action這個屬性本身并不管。比如:Android提供的標(biāo)準(zhǔn)Action:Intent.ACTION_VIEW,他只表示一個抽象的查看操作,但具體查看什么,啟動哪個Activity他并不知道,這取決于Activity的<intent-filter../>配置,只要Activity的<intent-filter../>配置中包含了ACTION_VIEW他就有可能被啟動, 可以調(diào)用Intent的setAction()方法為Intent設(shè)置Action屬性的值。

    b: Data/Type, Dta屬性是用于向Action屬性提供操作的數(shù)據(jù),Data屬性接收一個Uri對象,一個Uri對象通常通過如下形式的字符串來表示:

content://com.android.contacts/contacts/1
tel:123

     而Uri字符串總是滿足如下的格式

scheme://host:port/path

     Type屬性是用于指定Data屬性向Action提供的數(shù)據(jù)的格式,即指定該Data屬性所指定的Uri所對應(yīng)的MIME類型,這種MIME類型可以是任意自定義的MIME類型,只要符合abc/xyz格式的字符串即可。

    Data屬性與Type屬性的關(guān)系比較微妙,這兩個屬性會互相覆蓋,比如:

-->如果為Intent先設(shè)置Data屬性后設(shè)置Type屬性,那么Data屬性將會被Type屬性所覆蓋。
-->如果為Intent先設(shè)置Type屬性后設(shè)置Data屬性,那么Type屬性則會被Data屬性所覆蓋。
-->要希望二者都同時存在,則應(yīng)該調(diào)用Intent的setDataAndType()方法。

    c: Extra,Extra屬性相信您應(yīng)該使用過許多遍了,他用于用于在多個Action之間進(jìn)行數(shù)據(jù)的交換(Activity切換時的數(shù)據(jù)傳遞intent.putExtra(...)),該屬性值應(yīng)該是一個Bundle對象,Bundle對象類似于一個Map對象可以存入多個key-value鍵值對。

    d: Category,  Category屬性是用于向Intent提供附加信息的屬性,可以是任意的字符串,如果一個Activity中同時設(shè)置了Action與Category那么,只有當(dāng)二者同時滿足Activity才會被響應(yīng),可通過Intent的addCategory()方法來設(shè)置。

    說明:一個Intent對象只可以有一個Action但可以設(shè)置多個Category屬性,如果不指定Category屬性,系統(tǒng)會默認(rèn)初始化一個Category屬性,其值為Intent.CATEGORY.DEFAULT常亮(常亮值為android.intent.category.DEFAULT組件)


    (二)顯式Intent與隱式Intent。

    • 顯式Intent通過指定Intent組件名稱來實(shí)現(xiàn)的,一般使用在知道目標(biāo)組件名稱的前提下,指定需要轉(zhuǎn)向到的Activity,明確指定了要激活的組件,一般使用在應(yīng)用程序內(nèi)部。

    • 隱式Intent:通過Intent Filter來實(shí)現(xiàn)的,它一般用在沒有明確指出目標(biāo)組件名稱的前提下。Android系統(tǒng)會根據(jù)隱式意圖中設(shè)置的動作(action)、類別(category)、數(shù)據(jù)(URI和數(shù)據(jù)類型)找到最合適的組件來處理這個意圖。一般是用于在不同應(yīng)用程序之間

    對比:顯式Intent效率更高,因?yàn)橄到y(tǒng)可以直接精準(zhǔn)的定位到需要激活的組件,缺點(diǎn)是耦合度高,例如:通過這種方法調(diào)用一些系統(tǒng)組件,很容易因?yàn)榘姹镜母?,包名,類名,包結(jié)構(gòu)的變化而導(dǎo)致程序崩潰;隱式Intent相對于效率較底下,因?yàn)槊看我鈭D執(zhí)行的時候系統(tǒng)都會搜索所有的intentfilter,來查看是否有匹配的內(nèi)容,所以效率更底下。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI