44

理解できなくて申し訳ありませんが、私はアンドロイド開発の初心者です。

アクティビティ A とアクティビティ B を含むアプリケーションがあり、アクティビティ A からアクティビティ B に移動します。アクティビティ A を離れると、onSaveInstanceStateメソッドが呼び出されましたが、アクティビティ A に戻ると (同じアプリケーションのアクティビティ B から) )、onCreateメソッドのバンドルが null でした。

アクティビティ A の以前の状態を保存するにはどうすればよいですか? アプリケーションの有効期間中だけデータを保存したい。

誰かがこれで私を助けることができますか?

アクティビティ A のコードは次のとおりです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null)
    {
        Log.v("Main", savedInstanceState.getString("test"));
    }
    else
    {
        Log.v("Main", "old instance");
    }
}  

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
{
    Log.v("Main", "save instance");

    savedInstanceState.putString("test", "my test string");

    super.onSaveInstanceState(savedInstanceState);
}


public void buttonClick(View view)
{
    Intent intent = new Intent(this, Activity2.class);
    startActivity(intent);
}

ボタンを押してアクティビティ A に戻るときのアクティビティ B のコードを次に示します。

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}
4

6 に答える 6

59

あなたの質問に答えるには、Android ドキュメントをご覧ください: https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)

アクティビティ ライフサイクルの onStart() メソッドの後に onRestoreInstanceState が呼び出されると書かれています。

于 2014-10-04T08:05:19.627 に答える
28

状態の保存と復元は、ユーザーがアプリケーションを終了したときに廃止される現在の一時データを保存することを目的としています。アクティビティを最小化するか、次のアクティビティを開いて終了すると、リソースが不足しているためにシステムによって強制終了され、アクティビティにsavedInstanceState戻ったときに再起動される可能性があります。したがってonSaveInstanceState()、最小化復元セッションデータまたはローテーション時に保存する必要のあるデータを保存する場合にのみ使用してください。

したがって、前に新しいアクティビティを開始して前のアクティビティ(実行しようとしていること)に戻った場合、アクティビティAは強制終了されず(停止されたばかり)、破棄されずに再開される可能性があります。Don't keep activities開発者向けオプションメニューをチェックインすることで、強制的に強制終了して復元することができます。

最近のタスクリストを呼び出すfinish()か削除すると、タスクがクリアされてからに渡されません。ActivitysavedInstanceStateonCreate()

値を永続化する必要がある場合は、使用を検討してくださいSharedPreferences.

于 2013-03-12T13:41:19.633 に答える
2

onCreate() の後の onStart() の後

于 2016-07-18T15:35:27.327 に答える
0

この場合、フラグと SharedPreferences を使用しました。これは機能し、画面の向きを変更すると機能します。

于 2015-05-19T18:13:12.513 に答える