語法(SYNATX):
<activityandroid:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:clearTaskOnLaunch=["true" | "false"]
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale", "uiMode",
"orientation", "screenSize", "smallestScreenSize"]
android:enabled=["true" | "false"]
android:excludeFromRecents=["true" | "false"]
android:exported=["true" | "false"]
android:finishOnTaskLaunch=["true" | "false"]
android:hardwareAccelerated=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]
android:multiprocess=["true" | "false"]
android:name="string"
android:noHistory=["true" | "false"]
android:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"sensor" | "fullSensor" | "nosensor"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme"
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"] >
. . .
</activity>
包含於(CONTAINED IN):
<application>
能夠包含的元素(CAN CONTAIN):
<intent-filter>
<meta-data>
說明(DESCRIPTION):
這個元素聲明瞭一個Activity(或Activity的子類),Activity實現瞭應用程序的可視化用戶界面部分。應用程序中所有的Activity都必須在清單文件中用<activity>元素來聲明,沒有在清單文件中聲明的Activity,系統不會看到,也不會運行它。
屬性(ATTRIBUTES):
android:allowTaskReparenting
這個屬性用於設定Activity能夠從啟動它的任務中轉移到另一個與啟動它的任務有親緣關系的任務中,轉移時機是在這個有親緣關系的任務被帶到前臺的時候。如果設置瞭true,則能夠轉移,如果設置瞭false,則這個Activity必須要保留在啟動它的那個任務中。
如果這個屬性沒有設置,那麼其對應的<application>元素的allowTaskReparenting屬性值就會應用到這個Activity上。它的默認值是false。
通常,當Activity被啟動時,它會跟啟動它的任務關聯,並它的整個生命周期都會保持在那個任務中。但是當Activity的當前任務不在顯示時,可以使用這個屬性來強制Activity轉移到與當前任務有親緣關系的任務中。這種情況的典型應用是把應用程序的Activity轉移到與這個應用程序相關聯的主任務中。
例如,如果一個電子郵件消息中包含瞭一個網頁的鏈接,點擊這個鏈接會啟動一個顯示這個網頁的Activity。但是,由e-mail任務部分啟動的這個Activity是由瀏覽器應用程序定義的。如果把它放到瀏覽器的任務中,那麼在瀏覽器下次啟動到前臺時,這個網頁會被顯示,並且在e-mail任務再次顯示時,這個Activity有會消失。
Activity的親緣關系是由taskAffinity屬性定義的。通過讀取任務的根Activity的親緣關系來判斷任務的親緣關系。因此,通過定義,任務中的根Activity與任務有著相同的親緣關系。因此帶有singleTask或singleInstance啟動模式的Activity隻能是任務的根節點,Activity的任務歸屬受限於standard和singleTop模式。
android:alwaysRetainTaskState
這個屬性用於設置Activity所屬的任務狀態是否始終由系統來維護。如果設置為true,則由系統來維護狀態,設置為false,那麼在某些情況下,系統會允許重設任務的初始狀態。默認值是false。這個屬性隻對任務根節點的Activity有意義,其他所有的Activity都會被忽略。
通常,在某些情況中,當用戶從主屏中重新啟動一個任務時,系統會先清除任務(從堆棧中刪除根節點Activity之上的所有Activity)。
但是,當這個屬性被設置為true時,用戶會始終返回到這個任務的最後狀態,而不管中間經歷瞭哪些操作。這樣做是有好處的,例如,Web瀏覽器的應用就會保留很多用戶不想丟失的狀態,如多個被打開的標簽頁。
android:clearTaskOnLaunch
這個屬性用於設定在從主屏中重啟任務時,處理根節點的Activity以外,任務中的其他所有的Activity是否要被刪除。如果設置為true,那麼任務根節點的Activity之上的所有Activity都要被清除,如果設置瞭false,就不會被清除。默認設置時false。這個屬性隻對啟動新任務(或根Activity)的那些Activity有意義,任務中其他所有的Activity都會被忽略。
當這個屬性值被設置為true,用戶再次啟動任務時,任務根節點的Activity就會被顯示,而不管在任務的最後做瞭什麼,也不管任務使用Back按鈕,還是使用Home離開的。當這個屬性被設置為false時,在某些情況中這個任務的Activity可以被清除,但不總是這樣的。
例如,假設某人從主屏中啟動瞭Activity P,並且又從P中啟動瞭Activity Q。接下來用戶按下瞭Home按鈕,然後由返回到Activity P。通常用戶會看到Activity Q,因為這是在P的任務中所做的最後的事情。但是,如果P把這個屬性設置為true,那麼在用戶按下Home按鈕,任務被掛起時,Activity P之上的所有Activity(本例中是Activity Q)都會被刪除。因此當用戶再次返回到本任務時,用戶隻能看到Activity P。
如果這個屬性和allowTaskReparenting屬性都被設置為true,那些被設置瞭親緣關系的Activity會被轉移到它們共享的親緣任務中,然後把剩下的Activity都給刪除。
摘自 FireOfStar的專欄