Activity的重建機制

原文鏈接

什麼是重建?引發重建的場景有哪些?


通常是“系統資源的回收”或者’配置發生變化’導致的重建

系統資源回收是指:

當App處於背景模式的時候,可能因爲系統內存不足而被回收

配置發生變化是指:

當系統配置發生變化時,比如屏幕方向、語言的改變

重建的好處?


  1. 對於資源回收的情況,保存狀態並等到使用時再恢復,要比後臺存留進程所佔的資源要小的多
  2. 對於配置變化的情況,當屏幕方向發生變化,只有重建,纔有機會加載不同的視圖,當橫豎屏的佈局不同的話

狀態保存和恢復的具體過程?

首先,"狀態"是指支撐UI界面內容展示的臨時數據

比如EditText 中的文本,CheckBox的勾選與否

onSaveInstanceState 執行在onStop之前,onRestoreInstanceState 執行在onStart之後。

Activity 有兩個數據結構用於保存狀態;

一個是View States,專門用於存儲View的狀態;

再一個是Instance States, 用於存儲View States以及開發者在onSaveInstanceState中手動保存的Activity成員變量

狀態保存和恢復的注意事項?


1. 爲了成功保存狀態,要求View內部實現狀態保存和恢復方法。

原生的View都能做到;如果是自定義View,務必記住這一點;如果第三方View沒有做到,可以通過繼承其實現保存和恢復方法

2. 爲了成功恢復狀態,要求在佈局中給View賦予相應的id

3. 如果是Activity的成員變量,需要額外在Activity子類中重寫onSaveInstanceState和onRestoreInstanceState方法。

注意:

Activity 中重寫僅僅是爲了額外地保存成員變量。重寫方法時,記得要保留基類(super)的實現,Activity 正是在基類中完成 View 狀態的保存和恢復。

如何避免“配置發生變化"導致的重建?


在清單文件中爲該 Activity 配置 android:configChanges 屬性。
比如屬性值 orientation|screenSize 對應着旋轉屏幕,locale 對應着語言變化。
如此,在配置發生變化時,不會導致重建,而是走 onConfigurationChanged 回調。
在清單文件中爲該 Activity 配置 android:configChanges 屬性。
比如屬性值 orientation|screenSize 對應着旋轉屏幕,locale 對應着語言變化。
如此,在配置發生變化時,不會導致重建,而是走 onConfigurationChanged 回調。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章