1. 程式人生 > >AndroidManifest中Application、Activity、Service屬性介紹(轉 )

AndroidManifest中Application、Activity、Service屬性介紹(轉 )

一. application 標籤屬性

<application/> 應用的宣告。
該節點必須包含在android  <manifest/>節點中。
而<application/>節點包含了<activity/>,<activity-alias/>,<receiver/>,<provider/><uses-library/>這幾個節點。
<application
    android:allowClearUserDate = ["true"|"false"]
    android:allowTaskReparenting =["true"
|"false"] android:backupAgent = "string" android:debuggable = ["true"|"false"] android:description = "string resource" android:enabled = ["true"|"false"] android:hasCode = ["true"|"false"] android:icon = "drawable resource" android:killAfterRestore = ["true"|"false"] android:label = "string resource"
android:manageSpaceActivity = "string" android:name = "string" android:permission = "string" android:persistent = ["true"|"false"] android:process = "string" android:restoreAnyVersion = ["true"|"false"] android:taskAffinity = "string" android:theme = "resource or theme"
  1. android:allowClearUserData
    是否給使用者刪除使用者資料的許可權。預設為true。
  2. android:allowTaskReparenting
    該應用定義的activities是否可以從啟動的任務back stack中轉移到其他前臺的任務中,預設為false。
  3. android:backupAgent
    實現應用備份代理 的類名 ,BackupAgent的子類
  4. android:debuggable
    該應用是否可以在使用者模式下debug
  5. android:description
    使用者可讀的,更多的應用描述
  6. android:enable
    android系統是否可以例項化應用的元件,預設為true。如果為true,則該節點下的子節點的enable屬性決定是否可以例項化,如果為false,則即使子節點下的元件 的enable屬性為true,則元件仍不可 例項 化。
  7. android:hasCode
    應用是否包含程式碼,預設為true。當為false時,在啟動組價時,系統不會嘗試載入任何該應用的程式碼。
  8. android:icon
    整個應用的圖示 ,還是每個元件的預設圖示。
  9. android:killAfterRestore
    預設為true,當整個系統被恢復時,應用處理完資料後,將會終止。
  10. android:label
    應用標籤。
  11. android:managerSpaceActivity
    一個activity子類的全限定名稱 ,這個activity可以被系統啟動,並讓使用者管理此應用佔有的儲存空間。這個activity也必須用activity節點宣告。
  12. android:name
    此應用的appplication元件的全限定名稱 。當 啟動該應用時,這個application身份的元件將再該應用的其他元件之前被初始化,即application元件。
  13. android:permission
    這個屬性可以被 元件的permission重寫。
  14. android:persistent
    該應用是否在所有時間下都保持執行。通常 情況下不應該設定此標識,持久模式僅僅被個系統應用指定。
  15. android:process
    為應用下的元件指定一個程序的名稱。但每個元件可以設定自己的process屬性。
    預設情況下,android為應用建立一個程序,這個程序的名稱和manifest的package屬性名相同。
    通過設定這個屬性可以在其他應用中共享一個程序,這樣兩個應用可以共享使用者的ID和證書。
    如果這個屬性的名稱為“:”開始,則一個新的私有的程序將被建立。如果已小寫字母開始,則一個公共的程序將被建立。公共的程序可以被其他應用共享,來減少資源的使用。
  16. android:restoreAnyVersion
    表明這個應用準備嘗試恢復所有備份資料的集合,即使版本不匹配,所以要小心使用,預設為false。
  17. android:taskAffinity
    taskAffinity預設和manifest元素中的包名相同。
  18. android:theme
    設定主題,每個元件可以設定自己的theme
  19. android:allowBackup
    是否容許備份,當為false時,代開adb除錯,就會沒有log輸出。
  20. android:largeHeap
    應用程式是否使用一個比較大的堆建立,預設為false。

二、activity 標籤屬性

  1. android:allowTaskReparenting
    android:allowTaskReparenting是一個任務調整屬性。
    如果< application />的 android:allowTaskReparenting 屬性已配置,因此當為正在配置的Activity提供該屬性的時候,它的預設值首先來自< application />節點。如果< application/>節點上沒有配置該屬性的時候,則false就是它的預設值。Activity中的android:allowTaskReparenting會覆蓋application中此屬性
    通常,當一個Activity啟動的時候,Activity管理服務就會為這個Activity生成一個back stack並將此Activity與之相關聯。在一個任務back stack中可能存在多個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是否都將從任務back stack中移出。
    如果想要在啟動時只保留根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的圖示,或者桌面上的圖示。
該屬性 必須 設定為圖片資源引用,如果沒有設定,就使用 application 節點上的icon屬性。
11. android:label
該屬性用於描述該Activity的一個標籤,通常是隨著Activity圖示一起顯示出來的。
如果沒有設定該屬性,則使用< application />節點上的label屬性設定的值。
12. android:launchMode
這個屬性描述了該Activity應該如何被啟動。
在Intent物件中,與Activity標誌一起工作的模式有4種,
分別是:standard , singleTop , singleTask 和 singleInstance。
預設模式是standard。

模式有兩類,
一類是 standard 和 singleTop ,另一類是 singleTask 和 singleInstance 。
有 standard 和 singleTop 啟動模式的Activity可多次被例項化。
standard 是預設。系統總是在目標任務中建立Activity的一個新例項並且將intent按順序放入到例項中。
singleTop 有條件的 。如果Activity的例項已經存在於目標任務的頂部,
則系統通過呼叫onNewIntent()方法將intent傳送到該例項上,而不是建立Activity的一個新例項。
singleTask 系統在新任務的根上建立該Activity。
如果已經存在例項,則系統通過呼叫onNewIntent()方法來將intent傳送到該Activity上,它允許在這個Activity為根的任務中建立新的Activity。
singleInstance 和 singleTask 一樣,除了系統不啟動任何其他Activity到持有例項的任務上,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中一樣。
android:multiprocess
該屬性表示Activity的例項是否可以執行在啟動它的元件所在的應用程式程序中。
如果可以,則為true,否則為false。
預設值是false。
13. android:name
該屬性表示Activity的類名,它是Activity的子類。
其屬性值應該是一個標準的Java類名(如com.example.liyuanjing.ManiActivity)。
我們也可以將其標識為類的縮寫,比如名稱的首字母是一個點(例如.ManiActivity),
那麼它就被追加< manifest />元素指定的包名,
從而變成com.example.liyuanjing.ManiActivity(假設包名為com.example.liyuanjing)。
這點完全由系統完成,我們不需要關心這個過程的細節,但這個屬性是必須配置的,並且不提供預設值。
14. android:noHistory
這個屬性用於設定在使用者離開該Activity,並且它在螢幕上不再可見的時候,是否應該從Activity的堆疊中刪除。
如果應該刪除,則為true,否則為false,預設值是false。
true意味著Activity將不會留下歷史痕跡,它將不會為任務而在Activity棧中保留資料,
所以使用者將不能返回到Activity上。
15. android:permission
表示的是許可權名稱。
如果startActivity()或者startActivityForResult()的呼叫者還沒有被授予指定的許可權,則啟動失敗。
如果該屬性沒有設定,則< application />元素的 permission 屬性設定的許可權就應該應用到Activity中。
如果這兩個屬性都沒有設定,則Activity就不會被許可權保護。
16. android:process
該屬性表示該Activity執行的程序名稱。
通常,應用程式的所有元件在為應用程式而建立的預設程序中執行。
< application />元素的process屬性可以為所有元件設定一個不同的程序,
但是每個元件可以覆蓋這個屬性的值,這樣就實現了將應用程式部署在多個程序間。
如果分配該屬性的名稱是以冒號(:)開頭,則在需要新程序並且Activity在該程序中執行的時候, 就會建立一個對於應用程式私有的新程序。
17. android:screenOrientation
該屬性表示Activity顯示的方向(比如縱向,橫向),它是值可以是下表中的任意一個字元。
取值 說明
unspecified 預設值,根據重力感應選擇方向
user 使用者當前偏好的方向
behind 和Activity相同的方向
landscape 橫向
portrait 縱向
reverseLandscape 與正常橫向相反方向 的橫向
reversePortrait 與正常縱向相反方向的縱向
sensorLandscape 只能是橫向,但是可以根據重力感應來決定是正常的還是反轉的橫向
sensorPortrait 中能是縱向,但是可以根據重力感應來決定是正常的或者反轉的縱向
sensor 方向由裝置方向感應器來決定。顯示的方向取決於使用者是如何持有裝置的;在使用者翻轉裝置時,方向發生改變。有些裝置在預設情況下不會翻轉到所有4個可能的方向。要允許可翻轉到所有4個方向,可以使用fullSensor。
fullSensor 方向由裝置方向感應為4個方向中的任意一個而確定
nosensor 無感應模式
18. android:stateNotNeeded
該屬性表明Activity是否能被終止以及是否能在還沒有儲存其狀態的情況下成功重啟。
如果Activity可以在不需要引用到之前狀態的情況下就能被重啟,則該屬性為true;
如果需要引用到之前的狀態才能被重啟,則為false。預設值是false。

通常,在暫時關閉Activity之前,我們要呼叫onSaveInstanceState()方法來儲存當前的Activity的狀態。該方法在Bundle物件中儲存Activity的當前狀態,該物件在重啟Activity時將會以引數的方式傳給onCreate()方法。
如果該屬性被設定為true,則onSaveInstanceState()就不會被呼叫,並且onCreate()會被傳遞null,這和Activity首次啟動時所做的一樣。
19. android:taskAffinity
該屬性指明對該Activity有親和力的任務。
有同樣親和力的Activity在概念上屬於同一任務(預設情況下是應用程式所定義的任務)。
任務的親和力是由其根Activity的親和力所決定的。

  1. android:theme
    該屬性是指為Activity定義一個整體主題風格資源的引用。
    所謂的風格包括字型種類,整體樣式等。使用該屬性可以使得我們的Activity在整體上更為統一,美觀。
    如果沒有設定該屬性,則Activity繼承將應用程式作為一個整體而設定的主題,具體可見元素的theme屬性。如果theme屬性也沒有設定,則使用預設系統主題。
  2. android:windowSoftInputMode
    該屬性表示Activity的主視窗如何與包含螢幕軟鍵盤的視窗互動。
    設定該屬性將影響兩件事。
    軟鍵盤的狀態。當Activity獲取輸入焦點時,是否隱藏軟鍵盤。
    對Activity主視窗的調整。
    該視窗是否被調整得更小一些來為軟鍵盤騰出空間,或者它的內容是否被移動以便在部分視窗被軟鍵盤覆蓋時,使得當前焦點可見。該屬性或者是下表的一個值,或者是state…值和adjust…值的組合。如果是多個值的組合,則使用(|)將其隔開。