![](/img/trans.png)
[英]Android Webview using Fragments to Retain text data across orientation changes
[英]Using `onRetainCustomNonConfigurationInstance` to retain data across configuration changes
我已經為Android編程了一段時間了,但我仍在尋找解決方案以通過配置更改保留數據。 除了節省Parcelable
s到活動的Bundle
中onSaveInstanceState
文檔使用暗示Fragment
與setRetainInstance
標志設置為true。
但是我剛剛遇到了一些使用onRetainCustomNonConfigurationInstance
來保存任意對象的代碼(以一種奇特的方式,但是本質上是大對象,而沒有引用Activity
等)。 我從未見過使用此方法,因此我有一些疑問:
onRetainNonConfigurationInstance()
不同,后者也應返回Object
,並且本質上應該類似地工作? 作為獎勵,我將不勝感激任何其他提示或解決方案來保存對象的狀態,例如AsyncTask
, Observable
,view的presenters並繼續
調用此方法是否安全以存儲任意對象(從某種意義上說,我可以確定它會被調用,並且不會在不久的將來被棄用/移除)?
onRetainCustomNonConfigurationInstance()
是一個相對較新的方法,不建議使用。 我真的認為它不會很快消失,因為沒有理由為了刪除它而引入新的東西。 您可以安全地使用它。
此方法與onRetainNonConfigurationInstance()有什么不同,后者也應返回Object,並且本質上應該類似地工作?
onRetainNonConfigurationInstance()
始終返回內部NonConfigurationInstances
類的實例,該類具有保留的片段,加載程序等狀態。 您不能(也不應)更改此系統行為。 這就是為什么該方法是final
方法,並且您無法覆蓋它的原因。
如果要保留自定義實例,則需要重寫onRetainCustomNonConfigurationInstance()
並從那里返回它。
實際上, onRetainNonConfigurationInstance()
調用onRetainCustomNonConfigurationInstance()
並使用其他狀態(如保留的片段和加載程序onRetainCustomNonConfigurationInstance()
保留重新調整的實例。
由於某些原因,使用保留的片段是否還更好?
這完全取決於您的用例和首選項。 邏輯可能是這樣的。 如果您的活動僅控制片段,並且其中沒有其他特殊邏輯,則使用保留的片段會更容易。 如果您的活動需要保留,則可以安全地使用onRetainCustomNonConfigurationInstance()
方法。 就目前而言,在這兩種情況下,狀態仍將由舊的且已過時的onRetainNonConfigurationInstance()
方法保留。
ps關於存儲狀態的獎勵問題,我寧願建議查看onSaveInstanceState()方法。 它旨在存儲狀態。
更新: 自2018年11月5日起,AndroidX版本已棄用該方法,並帶有以下說明: onRetainCustomNonConfigurationInstance已棄用。 使用ViewModel來存儲需要保留配置更改的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.