Superdry Memorandom :-p

旧「superdry memorandum :-D」です

Activityの4つの状態

初心者の人に教えるにあたって、Activityのライフサイクルをどう説明したらいいかで迷ってたのですが、ちょっといい説明があったのでメモってみました。

Activity Stackの図

Activityは以下のようなスタックで管理されている。

状態

  • Active
    • ActivityがActivity Stackの一番上にある。
    • 最前面のvisibleでfocusedでユーザ入力を受けられる状態。
    • Systemからkillされる優先度はPausedより低い。
  • Paused
    • ActivityがActivity Stackの一番上にある。
    • visibleだけどfocusは当たってない状態。例えば透過Activityやフル画面でないActivityが対象のActivityより上に表示された場合など。
    • unfocusedなのでユーザ入力は受け付けられない。
    • この状態でシステムからkillされることは滅多にないがまれにある。
    • Systemからkillされる優先度はStoppedより低い。
  • Stopped
    • unvisibleな状態だけどメモリ上には残っている。
    • この状態でデータセーブしたり、UI状態を保存したりする。
    • Systemからはまず最初にkillされる。
  • Inactive
    • Activityがkillされて再起動する前の状態。
    • この状態になるとActivityStackからは削除される

Activityの遷移


各メソッドについて

  • onCreate
    • Activityの初期化を行う。UIをinflateしたり変数定義やサービス、スレッドの生成など。Activity生成時に1回だけ呼ばれる。
  • onDestory
    • onCreate()で生成した全てのリソースを解放する。主に外部との接続(ネットワークやデータベースリンク)を閉じる処理をココで実装。
    • 必ずシステムから呼び出されるわけではないことに注意。
  • onRestoreInstanceState
    • UIの保存したい情報をBundleに入れて、onSaveInstanceStateメソッドをオーバライドしたメソッド内で保存する。この保存した前の画面の状態を読み出すメソッド。
  • onStop
    • Visible→Invisibleに遷移するとき呼ばれる。見えなくなるので、アニメーションとか、GPS、TimerやService、Broadcast ReceiverなどUIの更新に使われるようなプロセスを終了させる。必ずシステムに呼び出されるわけではないことに注意。
  • onStrat/onRestart
    • Invisible→Visible状態になったとき、onStartまたはonRestartでonStopで停止したUIを更新するようなプロセスを開始する。
    • onRestartはonStartより前に呼び出される。Activityが一旦Invisibleになったあと、Visibleになったときのみ実行される。
  • onPause
    • アプリのレスポンスに影響するので、ココはなるべく軽く速くなるように実装する。
    • onPauseの前に、onSaveInstanceState()が実行される。このメソッドはUI状態をBundleオブジェクトにつめてActivityのUI情報(例えば、入力途中の文字列とか、保存前のcheckboxの状態とか、フォーカス状態など)を保存する。なのでUI情報の保存はココで実装すべきじゃない。
    • ここでスレッドやプロセス、Broadcast Receiverを一時停止する。
    • 終了するときはシステムから必ず呼ばれる。
  • onResume
    • アプリのレスポンスに影響するので、ココはなるべく軽く速くなるように実装する。
    • onPause()で一時停止したスレッドやプロセス、Broadcast Receiverを再開させるような処理を実装する。
    • UI情報のリロードはココで実装すべきじゃない。