2019/09/11

Androidアプリ開発:アプリの起動にまつわるライフサイクルコールバック

Androidアプリを勉強も兼ねて作った。

お試しでAndroid Studioでコンポーネントを並べて、ビルドすると、コンポーネントが表示されるアプリが出来上がる。で、ここに何かデータを表示しようとすると、ライフサイクルにまつわるコールバックの処理と、データとビューをどう管理するか、という根源的な話かあっという間に迫ってくる。

まず、どうしても対処しないといけないのが、Activityのライフサイクルに関するコールバック。Android OSと深く連動したActivityのライフサイクルと、その状態遷移に伴うコールバックの処理がなかなか難しい。

普通のデスクトップアプリもイベント処理の要素は当然あり、UI処理を実行するするスレッドが決まっていて、そいつがいろいろなイベントを処理するということは、普通にある。

が、Activityが破棄された、回復させろ、というイベントは、メモリが少ないスマホならでは、の状態遷移である。

Activityの破棄・回復だけなら、回復に必要なデータを決めて、それの保存、回復すれば良いのでしょ? というのは正しいが、100点ではない。破棄・回復の間にいくつかのコールバックが呼び出されるので、どのコールバックで何を処理するのかをきちんと決めないといけない。

回復の処理で実行されるコールバックをみると、ランチャーからアプリを起動する時や、Activityがバックグラウンドからフォアグラウンドに復帰するときにも発生する。よって、Activityの起動処理は、Activityの破棄から回復の流れ、バックグラウンドからフォアグラウンドへの復帰の流れも踏まえた設計にした方が良い、ということ。ここをよく考えておかないと、後でブラッシュアップするときに、確実にライフサイクル処理を見直すことになる。

具体的には、Activityの起動・復帰・回復処理はonCreate, onRestart, onStart, onResumeの組み合わせで、Activiyの停止・終了処理はonPause, onStop, onDestoryの組み合わせで作ることになる。このように、Androidアプリでは、1つの処理に思える処理でも一連のコールバックやイベント処理に分割して実装しなければならないことが多くある。このイベントドリブンの考え方に慣れることがとても重要。面倒だと思っても、はじめからコールバックやイベントに合わせて処理を分割しておいた方が、手戻りが少なくなるはずだ。




0 件のコメント :

コメントを投稿