[英]How to properly save and restore Activity and Fragment status in Android?
在Android中,可以隨時銷毀“活動”和“片段”(例如,如果用戶已離開“活動”或已調用另一個“活動”)。 我在Fragment中有一些數據,我想保存它,但是找不到合適的方法。
例如,在“片段”中,我有以下代碼:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (null != savedInstanceState)
initState(savedInstanceState);
else
initStage(getArguments());
}
private void initState(Bundle bundle) {
mData = bundle.getParcelable(ARG_DATA);
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(ARG_DATA, mData);
}
在活動中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container);
if (findViewById(R.id.fragment_container) != null) {
Fragment fragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);
if (null == fragment) {
MyData data = getIntent().getParcelableExtra(ARG_DATA);
fragment = MyFragment.newInstance(data);
fragment.setRetainInstance(true);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
}
}
}
但是,如果托管Activity及其Fragment再次被破壞並創建,將會發生什么? 它會重新創建Fragment並嘗試使用舊參數對其進行初始化嗎? 如何避免這種情況,我是否必須每次都將數據傳輸回Activity,然后數據將被銷毀? 那么,擁有片段有什么意義呢?
謝謝
更新。
為了解釋這個問題,我有一個服務來將核心數據保留在其中。 我只需要Activity即可顯示數據,例如在db中創建新記錄。 但是,我最初發現的是,如果Activity被銷毀並重新創建,它將也重新創建基礎的Fragment並使用Activity參數包中的數據對其進行初始化。 並且所有用戶更改都將丟失。 我想要的是在創建Fragment之后,它將存儲用戶提交的數據,直到用戶單擊“提交”按鈕並退出活動為止。 因此,即使用戶離開活動然后返回,他也不會丟失已經輸入的數據。 問題是,用戶輸入內容后,我無法立即更新記錄。 這是一個復雜的系統,該記錄不僅會轉到本地db,該服務還將其發送到服務器,我想最大程度地減少電話和服務器之間的通信量。
我對SO @ Fragment調用了一個類似的問題,它調用了屏幕旋轉時片段丟失的狀態 。 搜索我的用戶名“ The Original Android”。
與您的代碼相比,示例代碼有所不同,即主Activity具有已保存的數據或狀態 。 原因是Fragment數據可能被破壞,從內存中消失了。 但是,當用戶退出應用程序時,主要活動會被破壞,並且該應用程序的生命周期通常會終止。 因此,將數據存儲在主活動中更為安全。
編輯 :如果您想閱讀Fragment生命周期,則為@ Fragments 。
祝你好運,讓我們發布...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.