[Android]予期せぬ活動終了への対応


Androidでは、Activityは通常、以下の場合に閉じられます.
  • ユーザの後退操作により手動で
  • を閉じる.
  • 2finish()を呼び出すことによって
  • がプログラム的に終了する.
  • システムシャットダウン
  • 画面回転時は
  • メモリ不足時
  • システムの終了は、ユーザーと開発者が意図していないものです.アクティビティがシステムによって終了すると、再起動時に以前のデータがすべて失われるため、満足のいくユーザー体験を得るためには、以前のデータのリカバリを考慮する必要があります.
    今日は、Androidシステムの停止時にデータをバックアップ/リカバリする方法について簡単に説明します.
    onSaveInstanceState(Bundle bd)
    システムが強制的にアクティビティを終了しないように、データバックアップコールバックします.アクティブなスレッドデータは、パラメータBundleのオブジェクトにバックアップできます.
    2021-09-19 22:47:38 I/TAG_SAVE: onPause()
    2021-09-19 22:47:38 I/TAG_SAVE: onStop()
    2021-09-19 22:47:38 I/TAG_SAVE: onSaveInstanceState() //데이터 백업 수행
    上記のライフサイクルログから、(key, value)は、アクティビティが完全にクローズされたときに呼び出され、ユーザーデータをバックアップします.
    onRestoreInstanceState(Bundle bd)
    システムのアクティビティが終了したときに以前のステータスを復元するコールバックを復元します.パラメータに渡されたonSaveInstanceState(Bundle)オブジェクトは、回復状態に必要なデータを参照することができる.このデータは、BundleでバックアップされたonSaveInstance()形式のデータです.
    2021-09-19 23:14:15 I/TAG_SAVE: onCreate()
    2021-09-19 23:14:15 I/TAG_SAVE: onStart()
    2021-09-19 23:14:15 I/TAG_SAVE: onRestoreInstanceState()
    2021-09-19 23:14:15 I/TAG_SAVE: onResume()
    (key, value)は、onRestoreInstanceState(Bundle)onStart()との間で呼び出される.常に呼び出されるライフサイクル概念ではなく、システムの終了時にのみ呼び出されるイベントコールバックです.
    Sample
    in OOOActivity.java
    
    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("백업 키", "백업 할 데이터");
    }
    
    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String data = savedInstanceState.getString("백업 키");
        // 복구 된 'data'를 기반으로 화면에 유의미한 데이터 출력
    }