繁体   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