- Activity的創(chuàng)建和配置
要?jiǎng)?chuàng)建 Activity 可以繼承Activity類或者現(xiàn)有的子類,并且實(shí)現(xiàn)Acivity在其生命周期的各種狀態(tài)之間轉(zhuǎn)變時(shí)(例如創(chuàng)建 Activity、停止 Activity、恢復(fù) Activity 或銷毀 Activity 時(shí))系統(tǒng)調(diào)用的回調(diào)方法,必須實(shí)現(xiàn)
onCreate()
方法,必須在此方法內(nèi)調(diào)用setContentView()
來為Activity指定一個(gè)布局,比如setContentView(R.layout.my_activity);
在配置Activity的時(shí)候一定要記得在AndroidManifest.xml中進(jìn)行注冊(cè)和配置,比如
<manifest ... >
<application ... >
<activity android:name=".MyActivity" />
...
</application ... >
...
</manifest >
在Activity元素中,可以設(shè)置標(biāo)簽,圖標(biāo),風(fēng)格主題等,但是android:name
標(biāo)簽是必須要指定一個(gè)類名,其中的.
表示該類在當(dāng)前程序所在的包下,如果該類不在當(dāng)前包下,則需要用完成的包名+類名
- Android開發(fā)者官網(wǎng)關(guān)于Activity標(biāo)簽的介紹(此處 上網(wǎng)姿勢(shì)要對(duì))
以下標(biāo)簽后的注釋僅供您參考下,畢竟英語水平有限,還有就是我還是個(gè)新手,對(duì)于以下標(biāo)簽的理解還不是很透徹,可能會(huì)誤導(dǎo)大家,所以具體的使用方法請(qǐng)參照官網(wǎng)相關(guān)API指南
<activity android:allowEmbedded=["true" | "false"] //
android:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:autoRemoveFromRecents=["true" | "false"] //true 任務(wù)將會(huì)自動(dòng)的從overview screen中移除
android:banner="drawable resource"
android:clearTaskOnLaunch=["true" | "false"] //個(gè)屬性用來標(biāo)記是否從task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默認(rèn)為“false”。同樣,這個(gè)屬性也只對(duì)根Activity起作用,其他的Activity都會(huì)被忽略。 如果設(shè)置了這個(gè)屬性為“true”,每次用戶重新啟動(dòng)這個(gè)應(yīng)用時(shí),都只會(huì)看到根Activity,task中的其他Activity都會(huì)被清除出棧。如果我們的應(yīng)用中引用到了其他應(yīng)用的Activity,這些Activity設(shè)置了allowTaskReparenting屬性為“true”,則它們會(huì)被重新宿主到有共同affinity的task中。 每次home后,啟動(dòng)都會(huì)清除task中的其他activity。
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale",
"uiMode", "orientation", "screenSize",
"smallestScreenSize"]
android:documentLaunchMode=["intoExisting" | "always" |
"none" | "never"]
android:enabled=["true" | "false"] //是否可以被實(shí)例化
android:excludeFromRecents=["true" | "false"]
android:exported=["true" | "false"] //Activity 是否能被其他程序的啟動(dòng),True 表示可以,false 表示只能被同一程序的組件或者擁有相同用戶簽名的程序啟動(dòng),默認(rèn)值取決于該Activity intent filters
android:finishOnTaskLaunch=["true" | "false"]
android:hardwareAccelerated=["true" | "false"] //是否開啟硬件加速
android:icon="drawable resource" //程序的圖標(biāo)
android:label="string resource" //Activity標(biāo)題顯示的文字
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]//Activity的四種啟動(dòng)模式,默認(rèn)為standard
android:maxRecents="integer" //設(shè)置該Activity在總覽屏幕(overview screen)的最大任務(wù)數(shù) 有效值介于1-50 默認(rèn)為16,低內(nèi)存設(shè)備上限為25
android:multiprocess=["true" | "false"]
android:name="string" //Activity對(duì)應(yīng)的類名
android:noHistory=["true" | "false"] // true 表示當(dāng)用戶離開當(dāng)前Activity并且不在屏幕上顯示該Activity時(shí),會(huì)從堆棧中移除該Activity并且調(diào)用finish()銷毀.默認(rèn)值為false 當(dāng)為true時(shí) onActivityResult() 該方法將不會(huì)被調(diào)用
android:parentActivityName="string" //設(shè)置啟動(dòng)權(quán)限 可用來完成向上導(dǎo)航(Up navigation)
android:permission="string" //權(quán)限
android:process="string"
android:relinquishTaskIdentity=["true" | "false"]
android:screenOrientation=["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"userLandscape" | "userPortrait" |
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme" // Activity 的主題樣式
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"] >
. . .
</activity>
2.Activity的啟動(dòng)和關(guān)閉
Activity兩種啟動(dòng)方式
-
startActivity(Intent intent)
啟動(dòng)其他Activity -
startActivityForResult(Intent intent ,int requestCode)
Activity 將通過回調(diào)onActivityResult()
方法得到新啟動(dòng)Activity的結(jié)果,requestCode參數(shù)代表啟動(dòng)Activity的請(qǐng)求碼
Activity 結(jié)束方式
-
finish()
結(jié)束當(dāng)前Activity -
finishActivity(int requestCode)
結(jié)束以startActivityForResult(Intent intent,int requestCode)
方法啟動(dòng)的Activity
3.Activity的生命周期
在Activity的生命周期中主要有以下幾個(gè)方法
-
onCreate(Bundle savedStatus)
創(chuàng)建Activity時(shí)調(diào)用 -
onStart()
啟動(dòng)Activity時(shí)調(diào)用 -
onResume()
恢復(fù)Activity時(shí)調(diào)用 -
onPause()
暫停Activity時(shí)調(diào)用 -
onStop()
停止Activity時(shí)調(diào)用 -
onDestroy()
銷毀Activity時(shí)調(diào)用 -
onRestart()
在活動(dòng)由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也就是活動(dòng)被重新啟動(dòng)了
Resumed:已恢復(fù)狀態(tài),此時(shí)Activity位于前臺(tái),并且獲得用戶焦點(diǎn)
pasued : 暫停狀態(tài), 其他Activity獲得用戶焦點(diǎn),但該Activity仍然可見,仍存在與內(nèi)存中
Stoped : 停止?fàn)顟B(tài),該Activity完全被其他Activity覆蓋,仍存在于內(nèi)存中,可隨時(shí)被系統(tǒng)殺死
整個(gè)生命周期: 從onCreate()
開始到onDestroy()
結(jié)束
可見生命周期: 從onStart()
到onStop()
可以看到Activity在屏幕上,盡管有可能不在前臺(tái),不能和用戶交互,在這兩個(gè)方法之間,需要保持顯示給用戶的UI數(shù)據(jù)和資源等.
前臺(tái)生命周期: 從onResume()
到onPase()
該Activity處于所有Activity的最前面,和用戶交互.
4.Activity的啟動(dòng)模式
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]//Activity的四種啟動(dòng)模式,默認(rèn)為standard
- standard: 在standard模式下,每當(dāng)啟動(dòng)一個(gè)新的活動(dòng),它就會(huì)在返回棧中入棧,并處棧頂?shù)奈恢谩?duì)于使用standard模式的活動(dòng),系統(tǒng)不會(huì)在乎這個(gè)活動(dòng)是否已經(jīng)在返回棧中存在每次啟動(dòng)都會(huì)創(chuàng)建新的實(shí)例,Activity 可以多次實(shí)例化,而每個(gè)實(shí)例均可屬于不同的任務(wù),并且一個(gè)任務(wù)可以擁有多個(gè)實(shí)例。
- singleTop :該模式下在啟動(dòng)活動(dòng)時(shí)如果發(fā)現(xiàn)返回棧的棧頂已經(jīng)是該活動(dòng)時(shí),則認(rèn)為可以直接使用它,不會(huì)再創(chuàng)建新的活動(dòng)實(shí)例,如果不在棧頂則會(huì)創(chuàng)建新的實(shí)例。Activity 可以多次實(shí)例化,而每個(gè)實(shí)例均可屬于不同的任務(wù),并且一個(gè)任務(wù)可以擁有多個(gè)實(shí)例(但前提是位于返回棧頂部的 Activity 并不是 Activity 的現(xiàn)有實(shí)例)
- singleTask :每次啟動(dòng)該活動(dòng)時(shí)系統(tǒng)首先在返回棧中檢測(cè)是否存在該活動(dòng)的實(shí)例,如果已經(jīng)存在則會(huì)直接使用該實(shí)例,并把在這個(gè)活動(dòng)之上的所有活動(dòng)統(tǒng)統(tǒng)出棧,在如果沒有則會(huì)創(chuàng)建一個(gè)新的活動(dòng)實(shí)例
- singleInstance :會(huì)啟用一個(gè)新的返回棧來管理這個(gè)活動(dòng)