簡(jiǎn)述Android Intent

什么是Intent?

Intent 是一種運(yùn)行時(shí)綁定(run-time binding)機(jī)制,它能在程序運(yùn)行過(guò)程中連接兩個(gè)不同的組件。

Intent的顯示與隱式使用

Intent intent = new Intent();  

顯示使用:
intent.setClass();
intent.setClassName();
隱式使用:
intent.setAction();  

startActivity(intent);  

Intent Filter的四個(gè)屬性

在<intent-filter>里有Action、Category、Data三個(gè)屬性可以讓intent來(lái)匹配。

  • Action
    一個(gè) Intent Filter 可以包含多個(gè) Action,指定該Activity可以執(zhí)行的動(dòng)作,它是一個(gè)用戶自定義的字符串。

    • 使用:
    • 需要注意:
      一條<intent-filter>元素至少應(yīng)該包含一個(gè)<action>,否則任何Intent請(qǐng)求都不能和該<intent-filter>匹配。
      如果Intent請(qǐng)求的Action和<intent-filter>中個(gè)任意一條<action>匹配,那么該Intent就可以激活該Activity(前提是除了action的其它項(xiàng)也要通過(guò))。
  • Category
    指定當(dāng)前動(dòng)作(Action)被執(zhí)行的環(huán)境,一個(gè)intent對(duì)象可以有任意個(gè)category。

    • 使用:
    • 需要注意:
      如果該activity想要通過(guò)隱式intent方式激活,至少應(yīng)該包含一個(gè)<category>。
  • Data
    執(zhí)行時(shí)要操作的數(shù)據(jù)。

    • 使用:

        intent.setData(Uri.parse("scheme://host:port/parth"));  
      
    • 實(shí)例:

        <data 
            android:scheme="scott" 
            android:host="com.scott.intent.data" 
            android:port="7788" 
            android:path="/target"/>  
        intent.setData(Uri.parse("scott://com.scott.intent.data:7788/target"));
      
    • <data/>標(biāo)簽中包含了以下幾種子元素,他們定義了url的匹配規(guī)則:

      • android:scheme
        匹配url中的前綴,除了“http”、“https”、“tel”...之外,我們可以定義自己的前綴;
      • android:host
        匹配url中的主機(jī)名部分,如“google.com”,如果定義為“*”則表示任意主機(jī)名;
      • android:port
        匹配url中的端口;
      • android:path
        匹配url中的路徑。
    • 注意:

      • 其中host和port是關(guān)聯(lián)的,如果host沒(méi)有設(shè)置,port也會(huì)忽略。
      • 如果要設(shè)置path,那么也必須設(shè)置schema、host和port。
      • 定義了執(zhí)行此Activity時(shí)所需要的數(shù)據(jù),這些數(shù)據(jù)是必須的。
      • 像(scott://com.scott.intent.data:7788/target/?),就需要靈活配置。
        android:path 靈活配置,可以使用android:pathPrefix,表示路徑前綴。
        將android:path="/target"修改為android:pathPrefix="/target"即可。

Intent Filter 的匹配過(guò)程

  1. 加載所有的Intent Filter列表
  2. 去掉action匹配失敗的Intent Filter
  3. 去掉url匹配失敗的Intent Filter
  4. 去掉Category匹配失敗的Intent Filter
  5. 判斷剩下的Intent Filter數(shù)目是否為0。如果為0查找失敗返回異常;如果大于0,就按優(yōu)先級(jí)排序,返回最高優(yōu)先級(jí)的Intent Filter

Extras

使用:intent.putExtras();
通過(guò)創(chuàng)建Bundle對(duì)象,再通過(guò)putExtras()和getExtras()方法來(lái)存取。

三種啟動(dòng)模式

  1. FLAG_ACTIVITY_NEW_TASK
    與"singleTask"模式相同,在新的 task 中啟動(dòng) activity。如果要啟動(dòng)的 activity 已經(jīng)運(yùn)行于某 task 中,則那個(gè) task 將調(diào)入前臺(tái)。

  2. FLAG_ACTIVITY_SINGLE_TOP
    與 "singleTop"模式相同,如果要啟動(dòng)的 activity位于back stack 頂,系統(tǒng)不會(huì)重新創(chuàng)建目標(biāo)Activity實(shí)例,而是直接復(fù)用Task棧頂?shù)腁ctivity。

  3. FLAG_ACTIVITY_CLEAR_TOP
    如果要啟動(dòng)的 activity 已經(jīng)在當(dāng)前 task 中運(yùn)行,則不再啟動(dòng)一個(gè)新的實(shí)例,且所有在其上面的 activity 將被銷毀。
    此種模式在launchMode中沒(méi)有對(duì)應(yīng)的屬性值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容