1

を使用してサービスから XML ファイルをロードするアプリケーションActivityがあります。XML は に解析されます。別のアクティビティに切り替えてからメイン アクティビティに戻るときに、その XML ファイルが既に読み込まれていることを認識して、入力された .xml ファイルを使用できるようにしたいと考えています。onCreateAsyncTaskArrayListArrayList

それを永続化する最良の方法は何ArrayListですか?

onSaveInstanceStateonRetainNonConfigurationInstanceプリミティブしかサポートしていないようで、実際に呼び出されるケースを設定できませんでした。ではonCreate、XML データはサーバーに切り替えるたびにサーバーからロードされますActivity。私はArrayListimplementParcelableにあるモデルを作成したので、それを何らかの方法で使用できますか?

4

2 に答える 2

3

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

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

onSaveInstanceState はプリミティブのみをサポートしているようです

HOME の質問に対する答えが「はい」の場合は、アクティビティのデータ メンバーにデータを保持するだけでよく、適度なサイズの場合は in にも格納できBundleますonSaveInstanceState()。Aは のをBundle保持できます。ただし、データ セットが大きい場合 (たとえば、100KB 以上) は、おそらくこのルートには進みたくないので、上記で説明した「いいえ」の方法を検討する必要があります。ArrayListParcelable

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 に答える