1

我有一个应用程序Activity,它onCreate使用AsyncTask. XML 被解析为ArrayList. 当我切换到不同的活动,然后回到主活动时,我希望能够识别出该 XML 文件已经加载并使用填充的ArrayList.

坚持这一点的最佳方法是ArrayList什么?

onSaveInstanceState似乎只支持原语,我一直无法建立一个onRetainNonConfigurationInstance实际被调用的案例。因此onCreate,每当我切换到 XML 数据时,都会从服务器加载Activity。我已经制作了ArrayList工具中的模型Parcelable,所以可以以某种方式使用它吗?

4

2 回答 2

3

持久化 ArrayList 的最佳方式是什么?

我看不出您的问题与多项活动有什么关系。例如,如果用户按下 HOME(喘气!)会发生什么?您的应用程序最终将被关闭。是否要从服务器重新加载数据?如果答案是“是”,那么你不需要“坚持”任何东西,onSaveInstanceState()可能就足够了(见下文)。如果答案是“否”,那么您需要重新考虑您的数据模型方法,因此您安排将数据保存在数据库中,定期与您的 Web 服务同步,并可能转储ArrayList并用Cursor.

onSaveInstanceState 似乎只支持原语

如果我的 HOME 问题的答案是“是”,那么您可以只保留活动数据成员中的数据,如果它的大小适中,也可以将其存储BundleonSaveInstanceState(). 一个Bundle可以容纳一个ArrayListParcelable但是,如果数据集很大(例如,100KB 或更多),您可能不想走这条路,应该考虑我上面描述的“否”路径。

我一直无法设置实际调用 onRetainNonConfigurationInstance 的情况。

旋转屏幕。还有其他情况,但方向变化是最容易触发的情况。

但是,这与您的问题无关。

于 2011-02-25T23:35:34.247 回答
1

“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");
}
于 2011-02-26T01:05:29.070 回答