啟動那個Acitivity有兩種方式:implicit(隱藏) intent 和 explicit(明確) intent Explicit Intent明確的指定了要啟動的Acitivity
Implicit Intent 當(dāng)使用startActivity時,隱式Intent解析到一個單一的Activity。如果存在多個Activity都有能力在特定的數(shù)據(jù)上執(zhí)行給定的動作的話,Android會從這些中選擇最好的進行啟動。
Implicit Intent 到底發(fā)給哪個activity?這需要進行三個匹配,一個是action,一個是category,一個是data。根據(jù)三個的匹配結(jié)果,找到應(yīng)該啟動的Activity。
Action Implicit Intent動作匹配指Android Intent Filter包含特定的動作或沒有指定的動作。 一個Intent Filter有一個或多個定義的動作,如果沒有任何一個能與Intent指定的動作匹配的話,這個Intent Filter在算作是動作匹配檢查失敗。 <intent-filter>元素中可以包括子元素<action>,比如: Category Implicit Intent種類匹配更為嚴(yán)格。Intent Filter必須包含所有在解析的Intent中定義的種類。一個沒有特定種類的Intent Filter只能與沒有種類的Intent匹配。 <intent-filter>元素可以包含<category>子元素,比如: Data Implicit IntentIntent的數(shù)據(jù)URI中的部分會與Intent Filter中的data標(biāo)簽比較。如果Intent Filter定義scheme,host/authority,path或mimetype,這些值都會與Intent的URI比較。任何不匹配都會導(dǎo)致Intent Filter從列表中刪除。沒有指定data值的Android Intent Filter會和所有的Intent數(shù)據(jù)匹配。
數(shù)據(jù)在<intent-filter>中的描述如下: 解析出來后的處理邏輯如果這個過程中多于一個組件解析出來的話,它們會以優(yōu)先度來排序,可以在Android Intent Filter的節(jié)點里添加一個可選的標(biāo)簽。最高等級的組件會返回。 Android本地的應(yīng)用程序組件和第三方應(yīng)用程序一樣,都是Intent解析過程中的一部分。它們沒有更高的優(yōu)先度,可以被新的Activity完全的代替,這些新的Activity宣告自己的Intent Filter能響應(yīng)相同的動作請求。
應(yīng)用程序的啟動AndroidManifest.xml 文件中,把那個 activity 配置了 <action android:name="android.intent.action.MAIN" /> ,那就就是最先被啟動的 Activity ,如果多個設(shè)置了,則第一個設(shè)置的是最新被啟動的 Activity。 如下圖設(shè)置,是 .SplashActivity 先啟動的 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas./apk/res/android" package="ghj1976.HelloWorld" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="3" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWorldActivity" android:label="@string/app_name"> </activity> <activity android:name=".SplashActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 上面代碼中的 activity android:name: activity 的類名,必須有。 android.intent.action.MAIN 決定應(yīng)用程序最先啟動的Activity android.intent.category.LAUNCHER 決定應(yīng)用程序是否顯示在程序列表里
參考資料 Intent Filter匹配
什么時候加上android.intent.category.DEFAULT和LAUNCHER
Android 開發(fā)之:Intent.createChooser() 妙用
|
|
來自: 昵稱11482448 > 《Android》