5

質問についてもう少し。

アクティビティを作成したインテントで渡したデータが、それを殺さない場合に残っているかどうかを知りたいです。

例: アクティビティ A は、余分なデータ String(SomeStringValue) を使用してアクティビティ B を呼び出します。次に、アクティビティ B が D を呼び出す C を呼び出します。この間のどこかでアクティビティ B が破棄されました (たとえば、メモリを節約するため)。アクティビティ B に戻ると、再作成する必要があります (たとえば、onCreate が再度呼び出されます)。インテントを渡す代わりに戻るボタンを押すと、以前のインテントが残っていて、必要なデータを取得できますか、それともデータがなくなりますか。

私は自分でテストしようとしましたが、アプリ全体を強制終了せずに onCreate を再度呼び出すことはできません。

4

2 に答える 2

12

上記のように、開発者向けオプションに移動し、「アクティビティを保持しない」をオンにして、これをテストしました。

この方法を使用すると、アクティビティがメモリから削除されても元のインテントが維持されることがわかります。

onDestroyは、アクティビティを終了するとすぐに呼び出されます。元のアクティビティに戻ると、onCreateは、最初に送信されたのと同じインテントの値で呼び出されます。

次のコードがテストベッドとして使用されました。

public class MyActivity extends Activity {
/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String extra = getIntent().getStringExtra("test");

    ((TextView) findViewById(R.id.test)).setText(extra);
}

public void onClick(View view) {
    Intent i = new Intent(this, MyActivity.class);
    i.putExtra("test", ""+Math.random());
    startActivity(i);
}

@Override
protected void onDestroy() {
    Log.d("Test", "onDestroy");
    super.onDestroy();    //To change body of overridden methods use File | Settings | File Templates.
}

}

したがって、あなたの質問に答えるために、インテントデータの保存はonSavedInstanceStateで冗長です。変更されたもの、または保存する必要があるが永久に保持されないものはすべて保存する必要があります。

于 2013-01-02T16:00:45.830 に答える
0

onDestroy()メソッドが呼び出された場合、すべての意図データが失われる可能性がありonSaveInstanceState()ます...そこに意図データがあるメソッドをオーバーライドする必要があります...その後onCreate()、saveInstaceStateバンドルがnullかどうかを確認するだけです...

これにより、何が起こっても、すべてのエクストラが確実に保存されるはずです...

于 2013-01-02T15:44:41.943 に答える