一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android到底那個Acitivity啟動

 昵稱11482448 2013-03-26

啟動那個Acitivity有兩種方式:implicit(隱藏) intent 和 explicit(明確) intent

Explicit Intent

明確的指定了要啟動的Acitivity
比如以下Java代碼,明確指定了要啟動B:
Intent intent= new Intent(this, B.class) 

 

Implicit Intent


沒有明確的指定要啟動哪個Activity ,而是通過設(shè)置一些Intent Filter來讓系統(tǒng)去篩選合適的Acitivity去啟動。

當(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>,比如:
<intent-filter>
<action android:name=”com.example.project.SHOW_CURRENT” />
<action android:name=”com.example.project.SHOW_RECENT” />
<action android:name=”com.example.project.SHOW_PENDING” />
</intent-filter>
一條<intent-filter>元素至少應(yīng)該包含一個<action>,否則任何Intent請求都不能和該<intent-filter>匹配。如果Intent請求的Action和<intent-filter>中個某一條<action>匹配,那么該Intent就通過了這條<intent-filter>的動作測試。

Category Implicit Intent

種類匹配更為嚴(yán)格。Intent Filter必須包含所有在解析的Intent中定義的種類。一個沒有特定種類的Intent Filter只能與沒有種類的Intent匹配。

<intent-filter>元素可以包含<category>子元素,比如:
<intent-filter . . . >
<category android:name=”android.Intent.Category.DEFAULT” />
<category android:name=”android.Intent.Category.BROWSABLE” />
</intent-filter>
只有當(dāng)Intent請求中所有的Category與組件中某一個IntentFilter的<category>完全匹配時,才會讓該Intent請求通過測試,IntentFilter中多余的<category>聲明并不會導(dǎo)致匹配失敗。

Data Implicit Intent

Intent的數(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ù)匹配。

  • mimetype是正在匹配的數(shù)據(jù)的數(shù)據(jù)類型。當(dāng)匹配數(shù)據(jù)類型時,你可以使用通配符來匹配子類型(例如,earthquakes/*)。如果Intent Filter指定一個數(shù)據(jù)類型,它必須與Intent匹配;沒有指定數(shù)據(jù)的話全部匹配。
  • scheme是URI部分的協(xié)議——例如,http:,mailto:,tel:。
  • host-name或“data authority”是介于URI中scheme和path之間的部分(例如,www.google.com)。匹配主機名時,Intent Filter的scheme也必須通過匹配。
  • 數(shù)據(jù)path是緊接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情況下才匹配。

數(shù)據(jù)在<intent-filter>中的描述如下:
<intent-filter . . . >
<data android:type=”video/mpeg” android:scheme=”http” . . . />
<data android:type=”audio/mpeg” android:scheme=”http” . . . />
</intent-filter>
<data>元素指定了希望接受的Intent請求的數(shù)據(jù)URI和數(shù)據(jù)類型,URI被分成三部分來進行匹配:scheme、authority和path。其中,用setData()設(shè)定的Inteat請求的URI數(shù)據(jù)類型和scheme必須與IntentFilter中所指定的一致。若IntentFilter中還指定了authority或path,它們也需要相匹配才會通過測試。

解析出來后的處理邏輯

如果這個過程中多于一個組件解析出來的話,它們會以優(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匹配
http://www./?p=1651

什么時候加上android.intent.category.DEFAULT和LAUNCHER
http://www./content.aspx?ID=6416

Android 開發(fā)之:Intent.createChooser() 妙用
http://www.oschina.net/bbs/thread/9299

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲综合激情另类专区老铁性| 国产一区二区三区色噜噜| 国产视频在线一区二区| 精品欧美一区二区三久久| 大屁股肥臀熟女一区二区视频 | 成年人视频日本大香蕉久久| 男生和女生哪个更好色| 中国日韩一级黄色大片| 欧美三级大黄片免费看| 免费精品一区二区三区| 日本黄色高清视频久久| 日本人妻免费一区二区三区| 欧美区一区二在线播放| 老司机精品视频在线免费| 麻豆一区二区三区在线免费| 久久精品偷拍视频观看| 日韩精品第一区二区三区| 一区二区欧美另类稀缺| 麻豆视传媒短视频在线看| 欧美激情中文字幕综合八区| 国产一区二区三区香蕉av| 好东西一起分享老鸭窝| 亚洲一区二区欧美在线| 玩弄人妻少妇一区二区桃花| 久久精品免费视看国产成人 | 亚洲精品一二三区不卡| 国产精品久久女同磨豆腐| 91久久国产福利自产拍| 一级欧美一级欧美在线播| 亚洲欧美中文日韩综合| 黑丝袜美女老师的小逼逼| 爱草草在线观看免费视频| 久久re6热在线视频| 欧美一区二区黑人在线| 免费大片黄在线观看日本| 亚洲中文字幕视频在线播放| 高清欧美大片免费在线观看| 国产美女网红精品演绎| 亚洲最新中文字幕在线视频 | 亚洲第一视频少妇人妻系列| 精品一区二区三区中文字幕|