Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android 配置文件(activity)元素

Android 配置文件(activity)元素

編輯:關於android開發

Android 配置文件(activity)元素


語法:

   
    . . .

被包含在:

 

可以包含:

描述:

聲明實現了應用程序可視化用戶界面一部分的一個activity(activity子類),在清單文件中的必須以元素表示。任何未聲明的,將不會被系統看到而且永遠不會被運行。

屬性:

android:allowEmbedded

表明這個activity可以作為其它activity嵌入的子activity被啟動,特別地在一些子activity存活在一個容器的案例中,如一個顯示器被另一個activity所擁有。例如:被用於Wear自定義notification的activity必須聲明了這個,Wear才能在上下文流中展示這個駐留在其它進程中的activity。

該屬性默認的值是false

android:allowTaskReparenting

該屬性表示activity是否可以從它啟動的任務棧移動到它具有親和力(affinity)的任務棧,且這個任務棧是下一個被置為前台的任務棧。"true"表示可以移動,“false”表示必須停留在它啟動的任務棧中。

如果這個屬性沒有被設置,那麼activity的這個屬性值為false。

通常地,當activity被啟動了,它會關聯到啟動它的那個 activity 所在的任務棧中,而且在它的整個生命周期過程中都會停留在那個任務棧中。當它的當前任務棧不在被顯示的時候,你可以使用這個屬性將它重新定位到它具有親和力(affinity)的任務棧中。一般來說,它會造成該應用程序的所有activity移動到另一個應用程序的主要任務棧中。

activity的親和性(affinity)是通過屬性taskAffinity 定義的,任務棧的親和性(affinity)取決於通過讀取到的根activity的親和性(affinity)。因此,通過定義,根activity總是在任務棧中具有相同親和性(affinity)。因為有"singleInstance"和"singleTask"啟動模式的 activity 只能在任務棧的根部,那麼重新定位就不能用於"singleTop"和"standard"啟動模式的activity。

android:alwaysRetainTaskState

該屬性表示activity所存在的任務棧的狀態是否總是被系統所保持,''true"表示是,"false"表示在某些情況下,系統允許將任務棧重置為它的初始狀態。屬性默認值是"false",這個屬性僅對任務棧的根activity有用,對於其它的activity將被忽略。

通常,在某些情況,當用戶從主屏幕重新選擇任務棧時,系統會清除掉這個任務棧。一般地,如果用戶在很長時間(比如30分鐘)沒有訪問這個任務棧,它就會被清除。

然而,當該屬性設置為"true"時,用戶返回到這個任務棧總是為它的最後一個狀態,不管他是怎麼到達這個任務棧的。這是非常有用的,例如在應用程序中用戶喜歡浏覽網頁,並且想保留打開的每一個網頁的狀態。

android:clearTaskOnLaunch

該屬性表示是否無論何時從主屏幕啟動應用程序,都從任務棧中移除除根activity以外的其它activity。默認值是"false",這個屬性僅僅對activity啟動一個新的任務棧有意義,對啟動任務中的其它activity沒有作用。

當這個屬性是"true"的時候,每次用戶再次啟動這個任務棧,都會顯示任務棧的根activity,不管它們在任務棧中最後一次在做什麼,或者是否是按返回按鈕離開的。當是"false"的時候,在某些情況下任務棧會清除掉activity,但不是總是這樣。

如果這個屬性和alwaysRetainTaskState都是"true",任何可被重新定位的activity都會移動到它們同享一個親和力"affinity"的任務棧中。其它的activity除外。

android:configChanges

配置改變之後,activity它會自己處理。當在運行的時候配置改變了,activity會關閉然後默認重啟,但是聲明了configChanges屬性,將會阻止activity被重啟,反而,activity會依然運行,它的onConfigurationChanged()方法會被回調。

注意:應該避免使用該屬性,要使用也是最後的手段。請仔細閱讀 關於如何合適的處理(Handing Runtime Changes)由於配置改變引起的activity重啟。

任何一個下面的字符串都是這個屬性的有效值,多個值通過 "|" 分開,例如:"locale|navigation|orientation"。

\

\

\


所有這些配置的更改都會影響應用程序所看到的資源值。因此,當 onConfigurationChanged() 方法被回調時,通常它將需要再次恢復所有資源(包括視圖的布局,圖片等等)來正確地處理變化。

android:enabled

該屬性表示activity是否可以被系統初始化。"true" 表示是,"false"表示不是,默認值是"true"。

元素有它自己的可適用於所有應用程序組件(包括activity)的 enabled 屬性,為了使系統能夠實例化activity,和元素的 enabled 屬性必須設置為"true"(默認值也是"true"),如果其中一個為"false",則它不能夠實例化。

android:excludeFromRecents

該屬性表示這個activity所啟動的任務棧是否應該被排除在最近使用的應用程序列表中。也就是說,當這個activity是一個新任務棧的根actvity,這個屬性決定這個任務棧不會出現在最近應用程序的列表中。"true"表示這個任務棧會被排除在外,"false"表示會被包含到列表中。

android:exported

該屬性表示這個activity是否可以被其它應用程序的組件啟動,"true"可以,"false"不可以。如果是"false",則這個activity只能被同一個應用程序的組件或者具有相同 user ID 的組件啟動。

該屬性的默認值取決於activity是否包含 intent filters。缺少filters意味著activity只能通過指定它確切的類名稱來啟動,這暗示著該activity只能在應用程序內容使用,因此在這種情況下,默認值是"false'。另一方面,至少有一個filters暗示著這個activity可以被其它應用程序啟動,因此默認值是"true"。

這個屬性不是唯一限制activity暴露在其它應用程序面前的方式。你也可以使用 權限(permission )來限制外部可以啟動這個activity的對象。

android:finishOnTaskLaunch

這個屬性表示當用戶再次啟動activity所在的任務棧時(從主屏幕選擇任務棧)這個已經存在的activity實例是否應該被關閉(finish),"true"應該被關閉,"false"不應該,默認值是"false"。

如果這個屬性和alwaysRetainTaskState 都是"true",那麼這個屬性優先於其它的屬性。並且這個activity的親和性(affinity)將會被忽略,不能被重新定位到其它的任務棧。

android:hardwareAccelerated

這個屬性表示activity是否可以被硬件加速渲染,"true"是,"false"不是,默認值是"false"。

從Android 3.0開始,為了增加常見2D圖形操作的性能,新增適合於應用程序的硬件加速OpenGL渲染。當硬件加速渲染是可用的時候,大多數在Canvas, Paint, Xfermode, ColorFilter, Shader, Camera上的操作都會加速。這個結果在平滑的動畫,平滑的滾動中,甚至在沒有明確地使用框架OpenGL庫的應用程序中都會提高整體響應。由於增加資源是硬件加速,你的應用程序會消耗更多的內存。

注意:並不是所有的OpenGL 2D 操作都是能夠加速的。如果你使硬件加速渲染是可用的,請測試你的應用程序以確保渲染不會出錯。

android:icon

icon代表著activity。圖標展示給用戶是activity顯示在屏幕上的表示。例如,啟動任務棧的activity圖標在窗口中顯示。icon通常伴隨著一個label。

 

設置這個屬性必須關聯到一個drawable資源。如果沒有設置,會用application的icon代替。

activity的icon,無論是在這裡設置,還是通過元素設置,都是activity的 intent filters的默認icon。

android:label

對於activity的可讀用戶標簽。當activity必須向用戶表示時,該標簽將顯示在屏幕上。通常伴隨著icon一起顯示。

如果這個屬性不設置,會用application的label代替。

activity的label,無論是在這裡設置,還是通過元素設置,都是activity的 intent filters的默認label。

該label應該被關聯到一個string資源,以便它可以像用戶界面中的其它字符串進行本地化。然而,當你開發應用程序時,它也可以被設置為一個字符串。

android:launchMode

該屬性表示activity應該如何被啟動的一個指令。這裡有四種模式聯系著 intent 對象中的 activity flag(Intent.FLAG_ACTIVITY_),來決定當 activity 被調用的時候應該怎樣處理這個 intent。它們是:

"standard"

"singleTop"

"singleTask"

"singleInstance"

默認模式是"strandard"。

正如下面表中展示的一樣,模式分為兩種群體,一種是"standard" 和 "singleTop",一種是"singleTask" 和 "singleInstance"。"standard" 或者 "singleTop" 啟動模式可以被實例化多次,這種實例可以屬於任何 task 也可以位於任何activity stack。通常,通過調用 startActivity()方法啟動任務棧(如果這個 Intent 對象 含有 Intent.FLAG_ACTIVITY_NEW_TASK 指令,在這種情況下將啟動一個新的 task)。

相比之下, "singleTask" 和 "singleInstance" 啟動模式只能啟動一個 task,它們總是在 activity stack 的根部。此外,設備在一個時間只能擁有這個 activity 的一個實例。

"standard" 和 "singleTop" 模式是不相同的。對於一個 "standard' activity 有一個新的 intent,就有一個 實例被創建來響應這個 intent。每個 實例 處理一個 intent。相似地,一個新的 "singleTop" activity 實例也可能被創建處理一個 intent。然而,如果目標 task 已經有一個存在的實例在棧的頂部,這個實例將會接受這個新的 intent(onNewIntent()會被調用),而不會創建一個新的實例。在其它情況下,例如:如果已經存在一個"singleTop" activity的實例在目標 task中,但不在 stack 的頂部,或者它在 stack 的頂部但不在目標 task 中,這時一個新的實例將會被創建壓入 stack 中。

相似地,如果你浏覽到當前 stack 上的activity,該行為取決於 parent activity 的啟動模式。如果 parent activity 有啟動模式 singleTop (或者 intent 中含有 Intent_FLAG_ACTIVITY_CLEAR_TOP),這個 parent 會被帶到 stack 的頂部,而且它的狀態是可保存的。導航 intent 被 parent activity的 onNewIntent()方法接受。如果 parent activity 有啟動模式 standard (而且上一個 intent 不包含Intent_FLAG_ACTIVITY_CLEAR_TOP ),那麼當前 activity 和 它的 parent activity 都將從 stack 中彈出,而且一個 新的 parent activity 實例將被創建來接受這個導航 intent。

"singleTask" 和 "singleInstance" 也是不相同的,"singleTask" activity 允許其它activity 可以成為它的 task 的一部分。它總是在這個 task 的根部,但是其它 activity(必須是 "standard" 或者 "singleTop" activity)才可以進入這個 task。"singleInstance" activity,另一方面,不允許其它 activity 成為這個 task 的一部分。它是這個 task 僅有的一個 activity。如果它啟動另一個 activity,這個activity 將被分配到其它的 task(與一個 Intent.FLAG_ACTIVITY_NEW_TASK 的 intent一樣)。

\

正如上面表中所示,"standard" 是標准的模式,而且適合於大多是類型e的activity。"singleTop"也是一種常見的對大多數activity有用的模式。其它的兩種模式 "singleTask" 和 "singleInstance" 對於大多數應用程序不適合,因為它們會引起一種可能對用戶不熟悉且非常不同於其它應用程序的相互影響模型。

無論你選擇哪種啟動模式,請確保測試 activity 在啟動啟動期間,以及在導航返回和按返回鍵返回其它 activity 和 task 時候的適用性。

關於更多的啟動模式以及它們相關聯的 Intent flags ,請查看Task and Back Stack 文檔。

android:multiprocess

該屬性表示 activity 的實例能否啟動到那個啟動它的組件的進程中。"true" 表示可以,"false" 表示不可以,默認值是 "false"。

通常,activity的實例被啟動到 定義的應用程序所在的進程中,因此所有的 activity 實例都運行在一個進程中。然而,如果這個表示設置為 "true",activity 的實例可以運行在多個進程中,允許系統在使用時創建實例,這種情況幾乎沒有必要。

android:name

實現了activity類的名字。這個屬性值應該完全限定類名(例如:"com.example.project.ExtracurricularActivity"。然而,如果名字的第一個字符是"."(例如:".ExtracurricularActivity"),它會被追加在元素中定義的包名後。

一旦你發布了你的應用程序,你就不能改變這個名字(如果沒有設置 android:exported = "false")。

這個沒有默認值,你必須要指定它。

android:noHistory

該屬性表示當用戶導航離開activity且它不再屏幕上顯示時,是否該從 activity stack 中移除且關閉(它的finish()方法被調用)。"true" 表示是,"false" 表示不是,默認值是"false"。

值為"true" 意味著 activity 不會留下歷史痕跡。它也不會停留在 activity stack 的 task中 ,用戶也不能返回到它。

這個屬性是API 3 時引入的。

android:parentActivityName

這個類名是 activity 邏輯上的 parent 。這裡的名字必須要與元素的 android:name 屬性聯系在一起。

系統讀取這個屬性來決定當使用action bar 上的返回按鈕時哪個 activity 應該被啟動。系統也可以使用這個信息來與TaskStackBuilder一起合成一個 activity 的返回棧。

為了支持 API 4-16,也可以聲明一個有指定了值為"android.support.PARENT_ACTIVITY"的元素的 parent activity。例如:

 


    
    
有關聲明 parent activity 支持向上導航的更多信息,請閱讀Providing Up Navigation。

 

這個屬性是在 API 16 時引入的。

android:process

進程的名字就是 activity 運行的進程。通常,你不需要使用這個屬性,應用程序的所有組件都運行在應用程序創建的默認進程名字中。但是如果需要,你可以通過這個屬性重寫進程的名字,允許你在多個進程中擴展應用程序組件。

如果分配給這個屬性的名字以冒號":"開頭,當它被需要時且 activity 運行在這個進程中,一個新的對應用程序是私有的進程將被創建。如果進程的名字以小寫字母開始,則 activity 會在該名稱的一個全局進程中運行,但要提供它具有的權限。這允許不同應用程序的組件共享一個進程,減少資源的使用。

元素的 process 屬性可以為所有的組件設置一個不同的默認進程名字。

android:permission

客戶端必須啟動 activity 或者以其它方式來響應一個 intent 的權限,如果調用的 startActivity() 或者 startActivityForResult() 沒有被授予指定的權限,它的 intent 不會被傳遞到這個 activity。

如果這個屬性沒有被設置,元素的 permission 屬性適用於這個 activity。如果的 permission 屬性也沒有設置,這個activity不被權限保護。

有關 permission 的更多信息,請查看 Permissions。

android:screenOrientation

activity 的方向將顯示在屏幕上。

該值是下面字符串中的任意一個:

\

\

注意:當你聲明一個 portrait 或者 landscape 值,它將被認為對 activity的運行方向是一個很難的請求。同樣,你聲明的值可以通過服務過濾,如Google Play,這樣你的應用程序只提供支持你的 activity 所需的方向的設備。例如:如果你聲明了"landscape","reverseLandscape"或者"sensorLandscape",然後你的應用程序只支持 landscape 方向的設備。然而,你應該用元素明確地聲明你的應用程序要求的方向(portrait or landscape,例如:。這純碎是 Google Play 提供的過濾行為,平台本身不控制當設備只支持某些方向時你的應用程序是否可以安裝。

android:stateNotNeeded

activity是否在不保存它的狀態下可以被殺死並成功地重新啟動,"true" 表示在不保存它以前的狀態下可以重啟,"false"表示需要它以前的狀態。默認值是"false"。

通常,為了節省資源,在activity暫時被強制關閉之前,它的 onSaveInstanceState() 方法會被調用。這個方法將當前activity的狀態存放到一個Bundle對象中,當activity重啟時會將這個對象傳到 onCreate() 方法中。如果這個屬性設置為"true',onSaveInstanceState()方法不會被調用,onCreat()方法會傳遞一個null值而不是一個Bundle對象(與activity第一次啟動一樣)。

"true"能夠確保在沒有保留狀態的情況下,activity也可以重啟。例如:顯示在主屏幕的activity可以使用這個值來確保它在某些情況下崩潰也不會被移除。

android:taskAffinity

該屬性表示activity具有親和力的task,具有相同親和力的activity在概念上屬於相同的task(從用戶的角度來看就是同一個應用程序),activity的親和力取決於它的根activity的親和力。

親和性決定了兩件事:activity重新定位到的task(查看allowTaskReparenting),存儲當通過FLAG_ACTIVITY_NEW_TASK標志啟動的activity的task。

默認情況下,應用程序中的所有activity具有相同的親和力,你可以通過設置這個屬性來將它們分為不同的組,甚至將不用應用程序中的定義的activity放在同一個task中。為了指定activity不具有任何task的親和力,將其設置為空字符串就行了。

如果這個屬性沒有設置,activity會繼承應用程序設置的親和力,應用程序的默認親和力的名稱是由元素設置的包名。

android:theme

引用的style資源為activity定義了整個主題,這也自動地設置了activity的上下文中使用的主題。

如果這個屬性沒有設置,activity會繼承 application 設置的主題。如果應用程序也沒有設置主題,將使用系統設置的主題。對於更多的信息,請查看Style and Theme 開發指南。

android:uiOptions

activity UI 額外的選項。

必須是下面的值之一。

\

關於action bar 更多的信息,請查看Action Bar 開發指南。

這個屬性是API 14 時添加的。

android:windowSoftInputMode

activity 的主窗口怎樣與包含屏幕上軟鍵盤的窗口進行交互,這個屬性的設置影響兩點:

軟件盤的狀態(影藏或者顯示),當activity 成為用戶關注的焦點。

調整了activity的主窗口,無論是為軟件盤提供空間而調整它的大小到更小,還是當窗口的部分被軟件盤遮擋時讓它的部分內容平移以使當前焦點是可見的。

設置必須是下面列表中的值之一,或者是一個"state...'值加上一個"adjust..."值。可以設置多個值,其中值之間用"|"分開。例如:

 


在這設置的值(除“stateUnspecified”和“adjustUnspecified”以外)會重寫主題中的值。

 

\

\

這個屬性是API 3時引入的。

介紹:

所有的屬性除"noHistory" 和"windowSoftInputMode"外都是在API 1時引入的,它們是在API 3時引入的。

見:

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved