Androidアクティブデバイスの状態を保存

3909 ワード

通常、アクティビティが終了するとオブジェクトは消え、アクティビティのデータはすべて消えます.その後activityを実行すると初期状態になります.ただし、アクティビティのクローズ時に保持するデータを保存し、再実行時にデータを復元できますか?
アクティビティが終了した場合、通常はコードからfinish()関数を呼び出し、ユーザーが携帯電話の後退ボタンを押すか、画面に長時間現れず、システムが自分で閉じる.この場合、activityを再実行しても初期状態になるので、状態を保存してリカバリする必要はありません.
保存ステータスとは、アクティブデバイスがシャットダウンされ、メモリ内のデータが消失した場合でも、再実行時にユーザが保存したデータを使用してアクティブデバイスのステータスが復元されることを意味します.代表的な例は画面を回転させるときです.画面を回転するとactivityは終了して再表示されます.
画面が回転すると、onCreate() -> onStart() -> onResume()に動作した状態で、回転画面がonPause() -> onStop() -> onSaveInstanceState() -> onDestroy()に呼び出され、アクティブデバイスが閉じます.
このときactivityで生成されたすべてのデータが消失します.その後、アクティブオブジェクトが自動的に生成され、onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()に呼び出され、アクティブオブジェクトが画面に出力される.
アクティビティを終了するときに保存およびリカバリが必要なデータがある場合は、Bundleという名前のオブジェクトに含めることができます.その他のライフサイクル関数にはパラメータはありませんが、onCreate()、onSaveInstanceState()、onRestoreInstanceState()関数にはBundleオブジェクトがあります.したがって、このオブジェクトを使用してデータを格納および復元できます.
onSaveInstanceState()は、onStop()関数の後に呼び出されるため、この関数が呼び出されることは、アクティビティが終了したことを意味します.したがって、開発者がonSaveInstanceState()関数のパラメータ伝達bundleにデータを入れると、自動的にファイルにデータが保存されます.
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("data1", "hello")
        outState.putInt("data2", 10)
    }
束にデータを格納する場合は、putStringなどの関数を使用します.このように保存すると、データは自分のキャッシュファイルに保存されます.次に、アクティビティを作成して実行するときにキャッシュファイルがある場合は、コンテンツを読み込み、バインドされたオブジェクトのonCreate()、onRestoreInstanceState()関数のパラメータとして渡します.
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        val data1 = savedInstanceState.getString("data1")
        val data2 = savedInstanceState.getInt("data2")
    }