2011-02-25 15 views
1

AsyncTaskを使用してXMLファイルをロードするアプリケーションActivityがあります。 XMLは、ArrayListに解析されます。別のアクティビティに切り替えてメインのアクティビティに戻ったときに、そのXMLファイルが既にロードされていることを認識して、入力済みのArrayListを使用したいと考えています。Androidアクティビティのデータを管理する:onPause、onSaveInstanceState、onRetainNonConfigurationInstance

それを維持する最良の方法は何ですかArrayList

onSaveInstanceStateはプリミティブをサポートしているようで、onRetainNonConfigurationInstanceが実際に呼び出されるケースは設定できませんでした。だからonCreateでは、XMLデータはサーバーからロードされてから、それはActivityに切り替わります。私はArrayListにあるモデルをParcelableに実装していますので、それを何らかの方法で使うことができますか?

答えて

3

このArrayListを永続化する最善の方法は何ですか?

問題が複数のアクティビティとどこに関係しているのかわかりません。例えば、ユーザーがHOMEを押すとどうなりますか?あなたのアプリは最終的に閉鎖されます。サーバーからデータをリロードしますか?答えが「はい」の場合、何かを「持続」する必要はなく、で十分です(下記参照)。答えが「いいえ」の場合、データ・モデルへのアプローチを再考する必要があるため、データをデータベースに保管し、Webサービスと定期的に同期し、おそらくArrayListをダンプしてCursorに置き換えます。

はonSaveInstanceStateだけであれば、自宅の質問への答えは「はい」、そして、あなたは自分の活動のデータメンバのデータに保持することができている場合

プリミティブをサポートしているようだ、とサイズが適度である場合はBundleonSaveInstanceState()に格納してください。 Bundleは、ArrayListParcelableとすることができます。しかし、データセットが大きい場合(たとえば100KB以上)、このルートに行きたくない場合は、上記の「いいえ」パスを考慮する必要があります。

onRetainNonConfigurationInstanceが実際に呼び出されるケースを設定できませんでした。

画面を回転します。他のシナリオもありますが、向きを変更するのが最も簡単な方法です。

しかし、あなたの問題とは関係ありません。

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"); 
} 
関連する問題