0

私の問題の良い解決策を教えてください。

私はActivity1、Activity2を持っています。Activity1 で UI を作成しonCreate()、ある時点でユーザーが Activity2 を開始しますstartActivityForResult()

メモリ不足というのは非常に珍しいケースのようですが、一度遭遇したことがあるので、今後は防ぎたいと思います。「難しい」アプリやゲームを実行することで、この状況を繰り返すことさえできます。結果は - アプリに戻ると、Activity2 が再作成されます。そして、戻るボタンを押してActivity1に戻ると、それも再作成されます。そして、ここに論理的な衝突があります。Activity1 の UI は 0 から作成さonCreateれ、同時に更新されonActivityResultます。

どうすればこれを解決できますか? いくつかのフラグをトリガーしonCreateてチェックインしonActivityResultますか? これは私にとってはうまくいきますが、あるべき姿ではないと思います。

私の電話には Stock ROM、Android 2.3.5 が搭載されています

更新:わかりました、特定の質問、私は要素のリストを持っています。に組み込まれていonCreate()ます。Activity2 を離れると、後で更新するために、クリックされた要素の ID を覚えておく必要がありますonActivityResult()。バンドルに保存しても問題ありませんonSaveInstanceState()。しかし!onCreate()更新するものが何もないので、バンドルから入手するのは悪い考えです! ここで明確にするために、疑似コードを示します。

onCreate()
{
     elementId = getIdFromBundle();
     if (elementId == null) 
         createNewListFromZero();
}

onSaveInstanceState()
{
     putIdToBundle(elementId);
}

onActivityResult()
{
     updateOnlyOneListElement(elementId);
}

アクティビティが実際にシステムによって破棄されたため、id で要素を更新することはできません。そして、私はそれを再構築する必要があります。そして、私は に連続して電話をかけていonCreate(), onActivityResult()ます。問題は、これら 2 つのメソッド間でロジックを共有して、要素リストを正しい順序で作成/更新する方法です。

4

1 に答える 1

0

にアクティビティ状態を保存することを検討する必要がありますonSaveInstanceState。このバンドルは、アクティビティの再起動時に onCreate で返されます。アクティビティのライフサイクルを見てみましょう

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

アクティビティ クラスの javadoc:

上記の表の「強制終了可能」列に注意してください。強制終了可能とマークされているメソッドの場合、そのメソッドがアクティビティをホストしているプロセスを返した後、そのコードの別の行が実行されることなく、いつでもシステムによって強制終了される可能性があります。このため、onPause() メソッドを使用して永続データ (ユーザー編集など) をストレージに書き込む必要があります。

In addition, the method onSaveInstanceState(Bundle) is called before placing the activity in such a background state, allowing you to save away any dynamic instance state in your activity into the given Bundle, to be later received in onCreate(Bundle) if the activity needs to be re-created

于 2012-11-07T10:03:40.387 に答える