にんにんにん

エンジニアな日々を書いていきます

Activityのライフサイクルを管理する

アクティビティのライフサイクルについて、具体的にアプリの画面だとどんな状態になっているのかスクショを用いて説明している記事とか見かけないので、自分なりに解釈してみました。

アクティビティの状態は大きく分けると3つに分かれるようです。

  1. 再開状態

  2. 一時停止状態

  3. 停止状態

再開状態

別名「実行中」 つまり、アプリがフォアグランド(一番前)にいて、ユーザからのフォーカスが当たっている状態 つまり、

f:id:moroku0519:20180127121901p:plain

この状態かなと

一時停止状態

他のアクティビティがフォアグラウンドに出ているが、アクティビティが生きている状態。 他のアクティビティは画面全体を覆っているわけではなく、一部が表示されている感じ。 イメージでいうと、

f:id:moroku0519:20180127122907p:plain

こんな感じ? 厳密にはアクティビティではなく、DialogFragmentなので違いますが、あくまでイメージとして。 バックのアクティビティは生きていますが、極端にメモリが足りなくなった時は破棄されます。

停止状態

他のアクティビティがフォアグランドに来たので、現在のアクティビティがバックグラウンドに隠れて見えない状態です。(若干表現はおかしいかも?)

例えば、

f:id:moroku0519:20180127123520p:plain

さがすアクティビティから上部の検索バーを押すと、

f:id:moroku0519:20180127123610p:plain

検索アクティビティに遷移します。

これは、さがすアクティビティがバックグラウンドにいき、フォアグラウンドに検索アクティビティがきた状態です。

この時、さがすアクティビティは停止状態となっています。

別のアクティビティでメモリが必要となった場合は、さがすアクティビティはシステムに強制終了される可能性があります。

以上が、大きく分けて、アクティビティの3つの状態です。

その上で、よく見かけるアクティビティのライフサイクル図を見てみます。

f:id:moroku0519:20180127120327p:plain

コールバックがいくつもありますが、結局は先ほどの3つの状態のいずれかで呼び出されることを念頭に置けば、さほどややこしくはなさそうです。

次回は各コールバックがどういう時に呼び出されるのか整理していきます。