Android清單文件詳解(六) ---- <activity>節點的屬性
1.android:allowTaskReparenting
android:allowTaskReparenting是一個任務調整屬性,它表明當這個任務重新被送到前臺時,該應用程序所定義的Activity是否可以從被啟動的任務中轉移到有相同親和力的任務中。
看過前面博文都知道,講解過這個屬性,為什么在這里還要在提一次呢?因為它與
通常,當一個Activity啟動的時候,Activity管理服務就會為這個Activity生成一個任務并將此Activity與之相關聯。在一個任務中可能存在多個Activity,它按照一定順序排列在這個任務中,我們可以使用這個屬性來強制它重新成為此任務的頂層Activity。在當前的任務不再顯示時,也就是說,與此Activity相關聯任務不在前臺顯示的時候,可以使用這個特性來強制Activity轉移到與之有相同親和力的任務(taskAffinity屬性定義的任務)中。典型的用法是把一個應用程序的Activity移到另一個應用程序的主任務中。
例如,如果我們收到的一條短信(MMS應用程序)中包含一個電話號碼文本,此時可以單擊電話號碼來啟動撥號的快捷界面。但是,這個撥號界面是聯系人應用程序的一個Activity,在這個場景下,它可能成為MMS應用程序啟動的任務中的一個Activity,并位于該任務的頂層。如果它重新定位到聯系人的任務中,則我們重新啟動短信任務的時候就看不到這個撥號界面了。
Activity的親和力是由taskAffinity屬性定義的,Task的親和力是通過讀取當前任務根Activity的親和力決定的。因此,根據定義,根Activity總是位于相同親和力的任務里。由于在某些需求的要求下,一些Activity的啟動模式(由launchModel屬性定義)為singleTask和singleInstance,此類Activity只能位于任務的底部,因此,想要使用allowTaskReparenting屬性來調整Activity所屬任務,則啟動默認只能限于"standard"和"singleTop"這兩個模式。
2.android:alwaysRetainTaskState
該屬性表明該Activity所在任務的狀態是否由系統保存,如果是,則其值為true,如果配置為false,則表示在一定情況下Android將以初始狀態啟動該任務。該屬性的默認值是false。需要注意的是,該屬性僅對任務的根Activity起作用,其他的所有Activity都會被忽略。
當用戶重新選擇顯示該任務的時候,系統在通常情況下將會清理掉任務中除了根Activity外的其他Activity。這種情況通常是指用戶在一定時間限制內未對該任務進行操作,例如30分鐘內。反之如果該屬性配置為true時,系統總會以任務的最后狀態來顯示該任務,而不管用戶是如何返回的。
3.android:clearTaskOnLaunch
該屬性表明,除了任務中的根Activity,其他所有Activity是否都將從任務中移出。如果想要在啟動時只保留根Activity,則設置這個屬性的值為true,否則為false。 這個屬性的默認值是false。該屬性僅對啟動一個新任務的根Activity有意義。當配置為true時,每當用戶再次啟動任務時,則總是由任務的根Activity來處理請求。
如果該屬性和allowTaskReparenting都是true,則可重新成為父任務的任何Activity就要被移動到具有相同親和力的任務上,接著保留的Activity就被銷毀
4.android:configChanges
在某些設備配置(比如屏幕方向,字體大小,網絡類型等)發生變化的時候,Activity將會被重新啟動以適配新的配置,這是系統行為。而Android同樣為應用程序提供了一個阻止這種行為發生的手段,如果你不想因為某種配置變化而發生Activity重啟,則可以通過配置這個屬性并選擇你想要阻止的配置。如果你配置完畢并選擇了你關注的配置,則當這些配置發生改變的時候Activity不會重啟,而是通過onConfigurationChanged()回調方法通知應用程序這些配置發生了變化。
注意:如非必要,應該避免使用該屬性
下表列出了該屬性的有效值,要設置多個的時候,用“|”分割開即可。
所有這些配置的改變都能影響到應用程序對資源文件的選擇。所以,當onConfigurationChanged()被調用時,通常需要重新獲取所有的資源(包括視圖布局和圖片等),以便正確地處理這些改變。
需要注意的是,如果我們沒有實現onConfigurationChanged()回調,那么該Activity就會被銷毀并重新創建。
5.android:enabled
一般來說,每個Activity由Activity框架負責實例化,但你可以通過配置該屬性來限制系統的這種行為。該屬性表示Activity是否能被實例化,為true表示由系統實例化,否則為false。該屬性默認值是true。對于每一個Activity的子類,在它首次運行之前總要進行實例化,這個步驟是必須的。我們可以使用這個屬性來控制Android框架實例化Activity的行為,但這樣做是有風險的,所以不建議你這樣做。
6.android:excludeFromRecents
Android框架為我們維護了一個名叫“最近運行”的應用程序列表,以方便進行應用程序切換。該屬性表示應用程序是否應該將Activity從最近運行的應用程序列表排除,如果排除,則為true,否則為false。該屬性的默認值為false。這個屬性的前提是該Activity是某個任務的根Activity。
7.android:exported
該屬性表示Activity是否可以由其他應用程序中的組件來啟動,如果可以,則為true,否則為false。如果為false,則該Activity只能由同一應用程序的組件或者有同樣用戶ID的應用程序來啟動。
值得注意的是,如果你試圖從你的應用程序中啟動其他應用程序組件,在沒有使用該屬性的情況下,你必須以新任務(newTask)的方式啟動
8.android:finishOnTaskLaunch
該屬性是指不管何時,當用戶再次啟動Activity的任務時(在主頁屏幕上選擇該任務),是否應銷毀(或者終止)這個Activity的實例,如果應銷毀,則為true,否則為false.該屬性的默認值是false。
9.android:hardwareAccelerated
該屬性是指是否應為該Activity啟動硬件加速,如果應啟動,則為true,否則為false。默認值是false。
注意:不是所有的OpenGL 2D操作都會被加速。如果啟用硬件加速渲染器,則要測試你的應用程序以便確保它能使用渲染器而不會產生錯誤。
10.android:icon
它代表Activity和圖標。在Activity被顯示的時候,就用該圖標顯示給用戶。例如,用于示例任務的Activity的圖標,或者桌面上的圖標。
該屬性必須設置為圖片資源引用,如果沒有設置,就使用
11.android:label
該屬性用于描述該Activity的一個標簽,通常是隨著Activity圖標一起顯示出來的。
如果沒有設置該屬性,則使用
12.android:launchMode
這個屬性描述了該Activity應該如何被啟動。在Intent對象中,與Activity標志一起工作的模式有4種,分別是:standard,singleTop,singleTask和singleInstance。默認模式是standard。
如下表,模式有兩類,一類是standard和singleTop,另一類是singleTask和singleInstance。有standard和singleTop啟動模式的Activity可多次被實例化。
相反,singleTask和singleInstance這兩種模式下的Activity只能啟動一個任務它們一直待在Activity棧的根上。此外,設備一次只保存Activity的一個實例。
standard和singleTop模式只在一個方面上是不同的。在satndard模式下,每次都會實例化一個Activity新實例來響應這個Intent,每個實例處理一個intent。與此相似的是,singleTop模式下的Activity的新實例也可被創建來處理新的intent。但是,如果目標任務在其棧的頂部已經有Activity的一個實例,則會使用這個已經存在的Activity的實例來處理這個intent(回調onNewintent()方法),而不會創建一個新實例。在其他情況下,如果singleTop模式下的Activity的一個已存在實例在目標任務中而非棧的頂部,或者如果它在棧的頂部而非目標任務中,就會創建一個新實例并將它壓倒Activity棧頂上。
singleTask和singleInstance模式也同樣存在不同的啟動特性。singleTask模式下的Activity允許其他Activity成為它的任務的一部分,它總是在自身任務的根上,但是其他Activity可以被啟動到該任務中。另一方面,singleInstance模式下的Activity不允許其他Activity成為其任務的一部分,它是任務中唯一的Activity。如果它啟動了另一個Activity,則該Activity就被分配到不同的任務上,好比FLAG_ACTIVITY_NEW_TASK在intent中一樣。
13.android:multiprocess
該屬性表示Activity的實例是否可以運行在啟動它的組件所在的應用程序進程中,如果可以,則為true,否則為false。其默認值是false。
14.android:name
該屬性表示Activity的類名,它是Activity的子類,其屬性值應該是一個標準的Java類名(如com.example.liyuanjing.ManiActivity)。我們也可以將其標識為類的縮寫,比如名稱的首字母是一個點(例如.ManiActivity),那么它就被追加
15.android:noHistory
這個屬性用于設置在用戶離開該Activity,并且它在屏幕上不再可見的時候,是否應該從Activity的堆棧中刪除。如果應該刪除,則為true,否則為false,默認值是false。
true意味著Activity將不會留下歷史痕跡,它將不會為任務而在Activity棧中保留數據,所以用戶將不能返回到Activity上。
16.android:permission
表示的是權限名稱。如果startActivity()或者startActivityForResult()的調用者還沒有被授予指定的權限,則啟動失敗。
如果該屬性沒有設置,則
17.android:process
該屬性表示該Activity運行的進程名稱。通常,應用程序的所有組件在為應用程序而創建的默認進程中運行。
如果分配該屬性的名稱是以冒號(:)開頭,則在需要新進程并且Activity在該進程中運行的時候,就會創建一個對于應用程序私有的新進程。
18.android:screenOrientation
該屬性表示Activity顯示的方向(比如縱向,橫向),它是值可以是下表中的任意一個字符。
19.android:stateNotNeeded
該屬性表明Activity是否能被終止以及是否能在還沒有保存其狀態的情況下成功重啟。如果Activity可以在不需要引用到之前狀態的情況下就能被重啟,則該屬性為true;如果需要引用到之前的狀態才能被重啟,則為false。默認值是false。
通常,在暫時關閉Activity之前,我們要調用onSaveInstanceState()方法來保存當前的Activity的狀態。該方法在Bundle對象中存儲Activity的當前狀態,該對象在重啟Activity時將會以參數的方式傳給onCreate()方法。如果該屬性被設置為true,則onSaveInstanceState()就不會被調用,并且onCreate()會被傳遞null,這和Activity首次啟動時所做的一樣。
20.android:taskAffinity
該屬性指明對該Activity有親和力的任務。有同樣親和力的Activity在概念上屬于同一任務(默認情況下是應用程序所定義的任務)。任務的親和力是由其根Activity的親和力所決定的。
21.android:theme
該屬性是指為Activity定義一個整體主題風格資源的引用。所謂的風格包括字體種類,整體樣式等。使用該屬性可以使得我們的Activity在整體上更為統一,美觀。
如果沒有設置該屬性,則Activity繼承將應用程序作為一個整體而設置的主題,具體可見
22.android:windowSoftInputMode
該屬性表示Activity的主窗口如何與包含屏幕軟鍵盤的窗口交互。設置該屬性將影響兩件事。
①軟鍵盤的狀態。當Activity獲取輸入焦點時,是否隱藏軟鍵盤。
②對Activity主窗口的調整。該窗口是否被調整得更小一些來為軟鍵盤騰出空間,或者它的內容是否被移動以便在部分窗口被軟鍵盤覆蓋時,使得當前焦點可見。
該屬性或者是下表的一個值,或者是state...值和adjust...值的組合。如果是多個值的組合,則使用(|)將其隔開,例如
這里設置的值(stateVisible和adjustResize)覆蓋了設置在主題中的值。
Android 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。