blog

Android SDKハンズオンガイド:アクティビティとライフサイクル

Activityのライフサイクルは、ユーザーがアプリを実行したときに起動するだけでなく、実際にユーザーが切り出したり切り戻したりするときに得られるさまざまなフィードバックに影響します。アプリを開発する...

Jul 2, 2025 · 7 min. read
シェア

はじめに

アクティビティライフサイクルは、単にユーザーがアプリを実行したときに起動するだけでなく、実際にユーザーがアプリを切り出したり戻したりしたときに得られるさまざまなフィードバックに影響します。アプリを開発する際にまず念頭に置くべきことの1つは、ユーザーは実行中にアプリや他のアプリを切り替えることが多いということです。ユーザーの操作方法によっては、同じアプリがフォアグラウンドで動作していることもあれば、バックグラウンドで動作していることもあります。アプリケーションがそのような状況に対応できること、そしてそのような切り替え中にデータを保存したり復元したりできることを保証することが重要です。繰り返しますが、このプロセスは特定のアプリケーション、例えば機能コンポーネントでは若干異なります。

コールバックメソッド

***

ユーザーがアプリケーションを終了したり、アプリケーションに戻ったりするときなど、Activityが異なる状態にあるときにアプリケーションがどのように動作するかを制御するために、これを処理するためのオプションがいくつかあります。これらは、Activityのライフサイクルコールバックメソッドとも呼ばれ、Activityが特定の状態になったときにAndroidシステムから呼び出され、ユーザーが操作していないときにアプリケーションが機能し続け、データを失わず、必要でないリソースを使用しないようにするための一連の手順を実行します。各コールバック・メソッドは、アプリケーションを可能な状態のいずれかにします。

Javaアプリケーションのプログラミングに携わったことがある方なら、Androidアプリケーションの起動が異なるアプローチに従っていることにすでにお気づきでしょう。mainメソッドを直接使用するJavaアプリケーションとは異なり、Androidは起動時にまずメインのActivityクラスでonCreateメソッドを実行します。このクラスはマニフェストでメインの起動Activityとして指定されていることに留意してください。Activityは最初にonCreateメソッドをコールバックしますが、これはユーザーがアプリケーションを起動した後に処理を繰り返すことと同じです。この時点で、onCreate メソッドはアプリケーションを Created 状態にします。

ライフサイクル、コールバック・メソッド、ステートの概念は、開発者ガイドの中で図を通して視覚的に紹介されています。onResumeメソッドはResumed状態を提供します。他のコールバック・メソッドは、すべて onResume を中心としたもので、アプリケーションを Resumed 状態へ、または Resumed 状態から、状態を開始、または停止します。

ほとんどのアプリでは、コールバックの一部しか使用されませんが、少なくともonCreateは使用されます。あまり使用されませんが、すべてのコールバックとステートの役割を理解することで、アプリの実行中と実行停止時にAndroidがどのような影響を受けるかを理解することができます。一般的に、ユーザーがどのような手順から切り替えても同じ状態に戻れるようにする必要があります。また、ナビゲーションで進むか戻るかを選択した場合、アプリは必要なデータをすべて保存し、不要なハードウェアリソースを解放する必要があります。

ステップ 2

アプリケーションには、Created、Started、Resumed、Paused、Stoppedの5つの状態があります。 また、アプリケーションがこれらの状態に移行したり、状態から抜け出したりできるように、onCreate、onStart、onRestart、onResume、onPause、onStop、onDestroyの7つのコールバック・メソッドがあります、onPause、onStop、onDestroyです。これらのメソッドによって、アプリケーションは可能な状態を、場合によっては非常に高速に切り替えることができます。一般的に、アプリケーションは常に再開、一時停止、または停止状態にあると考えることができます。

別のアクティビティがフォアグラウンドにあり、アプリケーションを部分的に隠しているだけの場合、アプリケーションの状態はPausedになります。アプリケーションが完全にバックグラウンドにあり、ユーザーが操作することも表示することもできない場合、アプリケーションの状態は「停止」になります。

再開状態に入る

ご存知のように、アプリケーションが起動するとメインのActivityが起動し、onCreateメソッドが実行され、Activity UIとクラスに必要なすべてのデータエントリが準備されます。作成されるアプリケーションのほとんどは複数のActivityを含んでおり、ユーザーがアプリケーションとインタラクトしたときに他のActivityが起動します。次のコードを使用すると、Intentクラス経由でメインではない別のActivityを起動できます:

これは、アプリケーションパッケージ内の「About」という名前の別のアクティビティクラスを表しています。Eclipseで新しいActivityを作成するには、ソースパッケージを選択し、「File」→new→「Class」を選択します。次に、スーパークラスとしてAndroid Activityクラスを選択します。すべてのアクティビティがアプリケーションマニフェストにリストされている必要があることを忘れないでください。また、Intentクラスを使用して、異なるアクティビティ間でデータを転送することもできます。

Activityの実行時にはonCreateメソッドも同時に実行されるため、他のActivityクラスをリストアップするだけでなく、アプリケーション内でメインActivityと同様に扱うことが可能です。また、Activityごとにレイアウトファイルを作成し、メインのActivityと同じ技術的な仕組みを使用するように設定することも可能です。

アクティビティのonCreateメソッドが実行を開始すると、onStartメソッドとonResumeメソッドも実行を開始し、アクティビティはResumed状態になり、その後の実行で適宜Created状態やStarted状態に変換されます。

ActivityがResumed状態になる方法は複数ありますが、アプリケーションの起動はその中でも最も基本的なものにすぎません。ActivityがPausedまたはStoppedの場合、アプリケーションが現在の状態に切り替わった後、Activityは直接フォアグラウンドモードに入りますので、onCreateメソッドを繰り返し呼び出す必要はありません。Paused状態からResumed状態に戻ると、ActivityのonResumeメソッドが実行されます。アプリケーションが停止状態から実行状態に戻ると、onRestartメソッドが実行され、続いてonStartメソッドとonResumeメソッドが実行されます。

破棄状態への移行

***

アプリケーションが終了または非表示になると、Resumed は Destroyed に変更され、onPause メソッドはアプリケーションの Activity を実行時の Resumed 状態から Paused に変更します。onPause中は、アニメーションの再生、センサーデータの処理、ブロードキャストの受信など、リソースを必要とするタスクを停止する必要があります。onPauseが実行されている場合、onStopも同様に実行を開始することができます。データ保存のためにonPauseメソッドを使用することもできますが、通常、データ保存はonStopメソッドに任せるのがベストです。

前述したように、onResumeメソッドによって、全員のアクティビティを一時停止状態から再開状態に戻すことができます。つまり、onResumeを使用すると、onPause中に停止または公開されたコンテンツを復元できます。ただし、onResumeはアプリケーションの起動時など、他の状況でも実行されることを覚えておくことが重要です。

ステップ 2

onPause の後、アプリケーションが Stopped 状態になると、onStop も実行を開始します。この場合でも、onRestart、onStart、onResume メソッドでアプリケーションを再開状態に戻すことができます。onStop では、データベースへの書き込みなど、必要なデータだけに操作量を圧縮するようにします。アプリケーションが完全にシャットダウンされたときにメモリがオーバーフローする問題を回避するために、アプリケーションが使用するすべてのリソースを onStop に含めるようにしてください。

このシステムは、アプリケーションが再開状態から停止状態に切り替わった後、ビューに表示する必要があるものなど、特定のデータを保存します。onRestart、onStart、およびonResumeメソッドはすべて、アクティビティが停止状態から再開状態に戻ったときに実行を開始します。ただし、onStartとonResumeは、アプリケーションの起動時など、実行されるタイミングが異なります。onRestartメソッドは、アプリケーションが停止状態からフォアグラウンドに戻された後にのみ実行されるため、onStopで保存したランタイムコンテンツを復元するために使用できます。

Tip:Activitの下から別のActivitを起動すると、前のActivitは停止状態になります。その後、ユーザーが戻るボタンを使って後者のActivityから再び前のActivityに戻ると、前者のonRestartメソッドが実行を開始します。

ステップ 3

onDestroyメソッドは、アプリケーションが完全にシャットダウンする場合、例えば現在のActivityがシステムから削除される場合に実行されます。アクティビティが完全になくなったときに実行される****メソッドですが、単純に一挙にすべてを消去してはいけません。実際には、onStopかonPauseを使って終了処理をする必要があります。もちろん例外もあります。バックグラウンドプロセスがまだ実行されている場合は、onDestroyで停止させる必要があります。

onDestroyが実行された後、ユーザーがアプリケーションActivityに戻ると、対応するonCreateメソッドが再び開始されます。一般に、onPauseとonStopはonDestroyの後に実行されると考えてよいでしょう。ただし、明示的にfinishメソッドを呼び出してアクティビティを終了する場合は、onDestroyのみが実行されます。

ほとんどの場合、onCreateメソッドのパラメータを使用してデータ保持の効果を得ることができるため、アプリケーションのライフサイクルコールバックに多くの労力を費やす必要はありません。ActivityのonCreateメソッドでは、Bundleパラメータが上記のようにビュー情報を自動的に保存する役割を果たします。しかし、このオブジェクトを使用して、アプリケーションとのユーザーインタラクションから生じる変数の更新を記録するなど、より多くのデータを保存することもできます。これを行うには、ActivityクラスのonSaveInstanceStateメソッドを使用し、データのキーと値のペアを書き込んだら、onCreateメソッドで元に戻すことができます。

ヒント:ユーザーがデバイスの表示モードを変更した場合、つまり縦向きと横向きを切り替えた場合、アクティビティは実際に再作成され、onCreateが再度実行されます。このプロセスは設定変更として知られています。この場合、表示モードごとに異なるレイアウトスキームを使用する場合など、アクティビティを再作成する必要があるとシステムは想定しています。しかし、たいていの場合、システムはそれに従って動作することを望みません。表示モードが変更されたときにアクティビティが再作成されないようにするには、マニフェストでアクティビティに「android:configChanges」属性を追加するか、アクティビティの構造を調整して変数を利用します。

Read next

IaaSオープンソースクラウドプラットフォームの分析と比較

クラウドコンピューティングの重要な形態として、IaaSサービスには様々なオープンソースと商用のクラウドプラットフォームソリューションがあります。本稿では、オープンソースのIaaSクラウドプラットフォームを利用してパブリッククラウドやプライベートクラウドの管理プラットフォームを開発するという視点に基づき、オープンソースのIaaSクラウドプラットフォームである、 、 、OpenStackを紹介し、比較します。

Jul 2, 2025 · 9 min read