簡體   English   中英

使用onRetainCustomNonConfigurationInstance保留跨配置更改的數據

[英]Using `onRetainCustomNonConfigurationInstance` to retain data across configuration changes

我已經為Android編程了一段時間了,但我仍在尋找解決方案以通過配置更改保留數據。 除了節省Parcelable s到活動的BundleonSaveInstanceState文檔使用暗示FragmentsetRetainInstance標志設置為true。

但是我剛剛遇到了一些使用onRetainCustomNonConfigurationInstance來保存任意對象的代碼(以一種奇特的方式,但是本質上是大對象,而沒有引用Activity等)。 我從未見過使用此方法,因此我有一些疑問:

  • 調用此方法是否安全以存儲任意對象(從某種意義上說,我可以確定它會被調用,並且不會在不久的將來被棄用/移除)?
  • 此方法與onRetainNonConfigurationInstance()不同,后者也應返回Object ,並且本質上應該類似地工作?
  • 由於某些原因,使用保留的片段是否還更好?

作為獎勵,我將不勝感激任何其他提示或解決方案來保存對象的狀態,例如AsyncTaskObservable ,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM