国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Activity configuration changes

2019-11-07 23:54:58
字體:
來源:轉載
供稿:網友

Android 系統規定當系統的Configuration 改變時將會重啟Activity。這是一種不太友好的體驗,我們可以通過編輯Manifest文件來避免Activity的重啟

要聲明由 Activity 處理配置變更,請在清單文件中編輯相應的 元素,以包含 android:configChanges 屬性以及代表要處理的配置的值。android:configChanges 屬性的文檔中列出了該屬性的可能值(最常用的值包括 “orientation” 和 “keyboardHidden”,分別用于避免因屏幕方向和可用鍵盤改變而導致重啟)。您可以在該屬性中聲明多個配置值,方法是用管道 | 字符分隔這些配置值。

例如,以下清單文件代碼聲明的 Activity 可同時處理屏幕方向變更和鍵盤可用性變更:

<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">

現在,當其中一個配置發生變化時,MyActivity 不會重啟。相反,MyActivity 會收到對 onConfigurationChanged() 的調用。向此方法傳遞 Configuration 對象指定新設備配置。您可以通過讀取 Configuration 中的字段,確定新配置,然后通過更新界面中使用的資源進行適當的更改。調用此方法時,Activity 的 Resources 對象會相應地進行更新,以根據新配置返回資源,這樣,您就能夠在系統不重啟 Activity 的情況下輕松重置 UI 的元素。

注意:從 Android 3.2(API 級別 13)開始,當設備在縱向和橫向之間切換時,“屏幕尺寸”也會發生變化。因此,在開發針對 API 級別 13 或更高版本(正如 minSdkVersion 和 targetSdkVersion 屬性中所聲明)的應用時,若要避免由于設備方向改變而導致運行時重啟,則除了 “orientation” 值以外,您還必須添加 “screenSize” 值。 也就是說,您必須聲明 android:configChanges=”orientation|screenSize”。但是,如果您的應用面向 API 級別 12 或更低版本,則 Activity 始終會自行處理此配置變更(即便是在 Android 3.2 或更高版本的設備上運行,此配置變更也不會重啟 Activity)。

例如,以下 onConfigurationChanged() 實現檢查當前設備方向:

@Overridepublic void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); }}

Configuration 對象代表所有當前配置,而不僅僅是已經變更的配置。大多數時候,您并不在意配置具體發生了哪些變更,而且您可以輕松地重新分配所有資源,為您正在處理的配置提供備用資源。 例如,由于 Resources 對象現已更新,因此您可以通過 setImageResource() 重置任何 ImageView,并且使用適合于新配置的資源(如提供資源中所述)。

請注意,Configuration 字段中的值是與 Configuration 類中的特定常量匹配的整型數。有關要對每個字段使用哪些常量的文檔,請參閱 Configuration 參考文檔中的相應字段。

請謹記:在聲明由 Activity 處理配置變更時,您有責任重置要為其提供備用資源的所有元素。 如果您聲明由 Activity 處理方向變更,而且有些圖像應該在橫向和縱向之間切換,則必須在 onConfigurationChanged() 期間將每個資源重新分配給每個元素。

如果無需基于這些配置變更更新應用,則可不用實現 onConfigurationChanged()。在這種情況下,仍將使用在配置變更之前用到的所有資源,只是您無需重啟 Activity。 但是,應用應該始終能夠在保持之前狀態完好的情況下關閉和重啟,因此您不得試圖通過此方法來逃避在正常 Activity 生命周期期間保持您的應用狀態。 這不僅僅是因為還存在其他一些無法禁止重啟應用的配置變更,還因為有些事件必須由您處理,例如用戶離開應用,而在用戶返回應用之前該應用已被銷毀。

如需了解有關您可以在 Activity 中處理哪些配置變更的詳細信息,請參閱 android:configChanges 文檔和 Configuration 類。

如果想要Activity不在系統語言發生改變時重試,需要給Activity設置locale屬性 但是這在Android 4.2 之前的版本有效,4.2之后的版本就不行了。因為Android 4.2增加了一個layoutDirection屬性,當改變語言設置后,該屬性也會成newConfig中的一個mask位。所以ActivityManagerService(實際在ActivityStack)在決定是否重啟Activity的時候總是判斷為重啟。 需要在android:configChanges 中同時添加locale和layoutDirection。

android:configChanges="locale|layoutDirection"

所以一下設置應該會滿足大部分情況下的Activity重啟問題

`android:configChanges="orientation|screenSize|locale|layoutDirection"`

orientation|screenSize—方向改變

locale|layoutDirection—系統語言改變

在AndroidManifest.xml中通過配置android:configuration的方法來防止Activity被銷毀并重建為什么不被推薦,具體原因參見:

http://blog.csdn.net/aliaooooo/article/details/23606179?spm=5176.100239.blogcont32546.102.ySmWMr&utm_source=tuicool

參考

Android Configuration changes:https://developer.android.com/guide/topics/resources/runtime-changes.html

http://blog.csdn.net/aliaooooo/article/details/23606179?spm=5176.100239.blogcont32546.102.ySmWMr&utm_source=tuicool


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 区。| 会东县| 女性| 车致| 永登县| 刚察县| 汉沽区| 东城区| 韶关市| 牙克石市| 郯城县| 海兴县| 满洲里市| 高碑店市| 香港 | 海淀区| 多伦县| 彭泽县| 宁明县| 吴堡县| 石阡县| 故城县| 凤阳县| 皮山县| 滁州市| 奎屯市| 肇源县| 中宁县| 阳曲县| 普定县| 河曲县| 鱼台县| 嘉峪关市| 嘉义市| 黄大仙区| 通山县| 包头市| 虞城县| 岗巴县| 余姚市| 都昌县|