簡體   English   中英

維護Android Activity的數據:onPause,onSaveInstanceState,onRetainNonConfigurationInstance

[英]Maintaining Android Activity's data: onPause, onSaveInstanceState, onRetainNonConfigurationInstance

我有一個應用程序Activity ,在onCreate使用AsyncTask從服務加載XML文件。 XML被解析為ArrayList 當我切換到不同的活動然后回到主活動時,我希望能夠識別出已經加載了該XML文件並使用填充的ArrayList

保持ArrayList的最佳方法是什么?

onSaveInstanceState似乎只支持原語,我一直無法設置onRetainNonConfigurationInstance實際被調用的情況。 因此,在onCreate ,只要我切換到Activity就會從服務器加載XML數據。 我已經使ArrayList的模型實現了Parcelable ,所以可以用某種方式使用它嗎?

保持ArrayList的最佳方法是什么?

我沒有看到你的問題與多個活動有什么關系。 例如,如果用戶按下HOME(喘氣!)會發生什么? 您的應用最終將被關閉。 您想從服務器重新加載數據嗎? 如果答案是“是”,那么你不需要“持久”任何東西,並且onSaveInstanceState()可能就足夠了(見下文)。 如果答案是“否”,那么您需要重新考慮數據模型的方法,因此您可以安排將數據保存在數據庫中,定期與Web服務同步,並可能轉儲ArrayList並將其替換為Cursor

onSaveInstanceState似乎只支持原語

如果我的HOME問題的答案是“是”,那么你可以只保留活動的數據成員中的數據,如果它的大小適中,也可以將它存放在onSaveInstanceState()中的Bundle中。 Bundle可以包含ParcelableArrayList 但是,如果數據集很大(例如,100KB或更多),您可能不想走這條路線,應該考慮我上面描述的“否”路徑。

我一直無法設置一個實際調用onRetainNonConfigurationInstance的情況。

旋轉屏幕。 還有其他方案,但方向更改是觸發它的最簡單方法。

但是,它與您的問題無關。

“onSaveInstanceState似乎只支持原語”

onSaveInstanceState支持對象,只要它們被聲明為可序列化即可。

// ON_SAVE_INSTANCE_STATE
// save instance data (5) on soft kill such as user changing phone orientation
protected void onSaveInstanceState(Bundle outState){
    password= editTextPassword.getText().toString(); 
    try {
        ConfuseTextStateBuilder b= ConfuseTextState.getBuilder();
        b.setIsShowCharCount(isShowCharCount);
        b.setTimeExpire(timeExpire); 
        b.setTimeoutType(timeoutType);
        b.setIsValidKey(isValidKey); 
        b.setPassword(password);
        state= b.build(); // may throw
    }
    catch(InvalidParameterException e){
        Log.d(TAG,"FailedToSaveState",e); // will be stripped out of runtime
    }
    outState.putSerializable("jalcomputing.confusetext.ConfuseTextState", state);  // save non view state
    super.onSaveInstanceState(outState); // save view state
    //Log.d(TAG,"onSaveInstance");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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