*

【android】Activityとプロセスのライフサイクル

公開日: : android

またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。
GMailやLineなどの大手アプリでも久しぶりに起動するとたまに落ちたりしますが、この辺りが原因なんじゃないかと勝手に思っています。

Activityとプロセスの状態とライフサイクルイベント

5と6は微妙な呼び名ですが、ここだけのお話なので。

1.アプリ起動  アプリ終了後にランチャからアプリアイコンタップ
   Activity : 生
   プロセス : 生

2.レジューム  サスペンド時にランチャからアプリアイコンタップ
   Activity : 生
   プロセス : 生

3.アプリ終了  アプリフォラグラウンド時にユーザーがバックキータップ
   Activity : 死
   プロセス : 生

4.サスペンド  アプリフォラグラウンド時にユーザーがホームキータップ
   Activity : 生
   プロセス : 生

5.プロセス終了 タスクツールなどからユーザーがプロセスを終了
   Activity : 死
   プロセス : 死

6.プロセスキル サスペンド時にメモリ圧迫等でOSがプロセス終了
   Activity : 生
   プロセス : 死

7.画面回転 アプリフォラグラウンド時に画面を回転
   Activity : 生
   プロセス : 生

鬼門は6のプロセスキル

ActivityとFragmentのライフサイクルでは7の画面回転がよく問題になりますが、プロセスでは6のプロセスキルではまります。

1.アプリ終了してもプロセスは生きているのでstaticメンバの状態は保持される
2.プロセスキルされてもActivityの状態は保持されている

普通はプロセスの方が生存期間が長いのですが、プロセスキルされた場合だけ、Activityの方が長くなります。
つまり、onCreateのsavedInstanceStateがnullではなく、Activityが復活した扱いになります。
なのでif (savedInstanceState == null) で初期化するような処理が通らなくなります。

例えば、フラグメントやシングルトンの初期化をここでやったりしていたのですが、6のサイクルの場合シングルトンを利用する局面になって、さらに初期化されていないとまずい処理になって、ようやく落ちる感じになるかと。

結局は

ちなみに今回はまったのはenumに状態を持たしていたのが原因なので、そもそも設計がアレかもしれません。
staticやenumなどプロセス依存の要素に状態を保持する場合はActivityとの兼ね合いも考えないといけないのがJava on Androidですね。

以上

関連記事

no image

【android】webviewでアプリ内にwebページを読み込む

webviewを使ってandroidアプリ内にwebページを読み込む定型文です。 //vie

記事を読む

no image

【andoid】ViewPagerを使う

1. layout.xmlにViewPagerを配置  2. PagerAdapter.jav

記事を読む

no image

【android】スリープモードに入らせない

Androidでは一定時間、操作をしないとスリープモードに入って待機状態になってしまいますが、動

記事を読む

no image

【android】 年月だけのDatePicker

final DatePicker datePicker = new DatePicker(sel

記事を読む

no image

【android】任意のスレッドで処理を行う

非UIスレッドでUIを操作したい場合に、任意の処理をUIスレッド上で実行する。 目次

記事を読む

no image

【android】非同期処理

Androidで非同期処理、マルチスレッドを処理するスニペット。 AndroidのスレッドはUIス

記事を読む

no image

【android】ネットワークの接続状況を確認する

コードから接続状況を確認。 ConnectivityManager co

記事を読む

no image

【android】サービスの実装

ダウンロードなどActivityに依存したくない大きなバックグラウンド処理や常駐プロセスを作りたい場

記事を読む

no image

ダイアログを表示する

カスタムアラートダイアログ private void showCustomAlert(A

記事を読む

no image

【android】設定画面の作成

res/xml/preferences.xml <?xml version=&quo

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑