web-dev-qa-db-ja.com

onRestoreInstanceStateはいつ呼び出されますか?

理解できなかったので申し訳ありませんが、Android開発で新しいです。

アクティビティ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);
}
37
Tünde

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

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

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

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

24

あなたの質問に答えるには、Android doc: https://developer.Android.com/reference/Android/app/Activity.html#onRestoreInstanceState(Android。 os.Bundle)

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

47
Simon

これは、あなたが難しい道を進んでいるからです。電話機のデフォルトの戻るボタンナビゲーションを使用した場合、onCreateにバンドルが渡されます。

この問題を回避するには、状態を共有設定とバックアップに保存することをお勧めします。バンドルがヌルの場合、共有設定から復元します。

3

OnCreate()の後のonStart()の後

2
bobbins

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

0
Vladimir Expert