android:configChanges
這個屬性列出瞭那些需要Activity進行自我處理的配置變化。當在運行時配置變化發生的時候,默認情況下,這個Activity會被關掉並重啟,但是用這個屬性聲明一個配置,就會阻止Activity被重啟。相反,這個Activity會保持運行,並且它的onConfigurationChanged()方法會被調用。
註意:應該避免使用這個屬性,並且隻把它作為最後的手段來使用。有關如何正確處理配置改變期間的重啟,請閱讀“處理運行是變化”(/kf/201204/127330.html)
下表中列出瞭這個屬性的有效值,要設置多個值的時候,用“|”符號連接,例如:“locale|navigation|orientation”
值 | 說明 |
mcc | IMSI移動國傢編碼改變時要進行自我處理—系統發現瞭一個新的SIM卡,並且更新瞭MCC。 |
mnc | IMSI移動網絡編碼改變時要進行自我處理—系統發現瞭一個新的SIM卡,並且更新瞭MNC |
locale | 語言環境發生變化時要進行自我處理—用戶選擇瞭一種用於顯示文本的新語言。 |
touchscreen | 觸屏發生變化時要進行自我處理。(這種情況通常不會發生) |
keyboard | 鍵盤類型發生變化時,要進行自我處理。例如用戶插入瞭一個外部鍵盤 |
keyboardHidden | 鍵盤的可用性發生變化時,要進行自我處理。例如用戶啟用瞭硬件鍵盤。 |
navigation | 導航類型(軌跡球/方向板)發生變化時,要進行自我處理。這種情況通常不會發生。 |
screenLayout | 屏幕佈局發生變化時,要進行自我處理。這可能是由被激活的不同的顯示方式所導致的變化。 |
fontScale | 字體的縮放因子發生變化時,要進行自我處理。如用戶選擇瞭一個新的全局字體尺寸。 |
uiMode | 用戶界面發生變化時,要進行自我處理。在把設備放入桌面/轎車內或夜間模式變化時,會導致這種情況發生。它在API級別8中被引入。 |
orientation | 屏幕的方向發生變化時,要進行自我處理。用戶旋轉設備時會發生這種變化。 註意:如果應用程序的目標API級別是13或更高的版本,那麼還應該聲明screenSize配置,因為設備在橫向和縱向之間切換時,對應的尺寸也會發生變化。 |
screenSize | 當前有效的屏幕尺寸發生變化時,要進行自我處理。這種變化意味著當前可用的相對長、寬比的尺寸發生瞭變化,因此當用戶在橫向和縱向之間切換時,就會產生屏幕可用尺寸的變化。但是,如果應用程序是在API級別12或更低的版本上編譯的,那麼Activity就要始終自己來處理這種變化(這個配置的變化不會重啟Activity,即使是運行在Android3.2或更高版本的設備上)。 這個設置在API級別13中被引入。 |
smallestScreenSize | 物理尺寸發生變化時,要進行自我處理。這種變化不關註屏幕方向的變化,隻在實際的物理屏幕尺寸發生變化時才會發生,如切換到另一個顯示器上的時候。這個變化對應smallestWidth屬性的配置來進行改變。如果應用程序是在API級別12或更低的版本上編譯的,那麼Activity就要始終自己來處理這種變化(這個配置的變化不會重啟Activity,即使是運行在Android3.2或更高版本的設備上)。 這個設置在API級別13中被引入。 |
所有這些配置的改變都會影響到應用中所能看到的資源值。因此,當onConfigurationChanged()方法被調用時,通常需要重新獲取所有的資源(包括佈局資源、可繪制資源等等),以便能夠正確的處理這些改變。
android:enabled
這個屬性用於設置Activity是否能夠被系統實例化。如果設置為true,則可以被實例化,如果設置為false,則不能被實例化。默認值是true。
<application>元素有它自己的enabled屬性,它的這個屬性設置會用於應用程序中的所有組件,包括Activity。<application>和<activity>元素的這個屬性必須要設置為true(默認情況下都是true),以便系統能夠實例化Activity。否則Activity不能被實例化。
android:excledeFromRecents
這屬性用於設置由該Activity所啟動的任務是否應該被排除在最近使用的應用程序列表之外。也就是說,當這個Activity是一個新任務的根節點時,這個屬性決定瞭這個任務適應要顯示在用戶最近使用的應用程序列表中。如果設置為true,則這個任務會被排除在列表之外,如何設置為false,則應該包含在最近使用的應用列表中。默認值是false。
android:exported
這個屬性用於設置該Activity能否由另一個應用程序的組件來啟動,如果設置為true,則可以啟動,否則不能啟動。如果設置為false,那麼該Activity隻能被同一個應用程序中的組件或帶有相同用戶ID的應用程序來啟動。
它的默認值要依賴與該Activity是否包含瞭Intent過濾器。如果沒有任何過濾器,則意味著該Activity隻能通過明確的類名來調用,這樣就暗示者該Activity隻能在應用程序內部使用(因為其他用戶不會知道它的類名),因此在這種情況下,默認值是false。在另一方面,至少存在一個過濾器,則暗示著該Activity可被外部使用,因此默認值是true。
這個屬性不是限制Activity暴露給其他應用程序的唯一方法。還可以使用權限來限制外部實體對該Activity的調用。
android:finishOnTaskLaunch
這個屬性用於設置既存的Activity實例,在用戶再次啟動(在主屏上選擇這個任務)它所屬的任務時,是否應該被關閉。設置為true,則要關閉,否則不關閉,默認值是false。
如果這個屬性和allowTaskReparenting屬性都被設置為true,那麼這個屬性要優於其他屬性,Activity的親緣關系會被忽略。該Activity不會被轉移父任務,而是被銷毀。
android:hardwareAccelerated
這個屬性用於設置該Activity是否應該啟用硬件加速渲染。如果設置為true,則啟用硬件加速,否則不啟用。默認設置是false。
從Android3.0開始,硬件加速的OpenGL渲染器對應用程序可用,以便改善許多共同的2D圖形操作的性能。當硬件加速渲染器被啟用時,在Canva、Paint、Xfermode、ColorFilter、Shader和Camera中大多數操作都會被加速。這樣會使動畫、滾動更平滑,並改善整體的響應效果,即使應用程序沒有明確要使用框架的OpenGL類庫。因為啟用硬件加速會增加系統的資源需求,所以應用程序會占用更多的內存。
要註意的是,不是所有的OpenGL 2D操作都會被加速。如果啟用瞭硬件加速渲染,就要對應用程序進行充分測試,以確保所使用的渲染沒有錯誤。
android:icon
這屬性定義瞭代表Activity的一個圖標。當Activity被要求顯示到屏幕上時,這個圖標會被顯示給用戶。例如,這個圖標會顯示在Launcher的窗口中,用於啟動任務。這個圖標經常會和label屬性組合使用。
這個屬性必須被設置為一個包含圖片定義的可繪制資源。如果沒有設置,就會使用給應用程序設置的圖標來代替。
Activity的圖標(或者是<application>元素設置的圖標)也是所有的Activity的Intent過濾器的默認圖標。
android:label
這個屬性給Activity設置瞭一個可讀的標簽。當Activity要展現給用戶的時候,這個標簽會顯示在屏幕上,它經常會跟Activity的圖標一起來顯示。
如果這個屬性沒有被設置,就會使用給應用程序設置的標簽來代替。
Activity的標簽(或者是<application>元素設置的標簽)也是所有Activity的Intent過濾器的默認標簽。
這個屬性應該用一個字符串資源來設置。以便它能夠在用戶界面中用其他的語言來本地化。但是為瞭開發應用程序的便利,也可以用原始的字符串來設置。
摘自 FireOfStar的專欄