android lifecycle

Androidアプリ開発

Androidアプリ開発で大切なライフサイクルを分かりやすく解説

モバイルアプリを開発していると、ビューの初期化が上手くできなかったり更新処理が思った動作と違っていたりすることがあります。これは、アプリ開発で必ず必要となるライフサイクルについてしっかりと理解していないことが多いためです。ライフサイクルを理解することで、アプリの不具合を少なくしたりパフォーマンスを向上させることにつながります。

ライフサイクルとは?

Androidアプリは、ライフサイクルという仕組みでシステムがアクティビティを作成、停止、再開、破棄などの処理を行っています。このライフサイクルは Craete, Start, Resume, Pause, Stop, Destroy の順で巡回します。そのためアプリは、ライフサイクルの適切な場所でコンポーネントやビューの初期化や更新などを行う必要があります。間違った処理をしてしまうと強制終了したり、適切に行えばパフォーマンスの向上などにもつながるので、アプリ開発ではライフサイクルの理解が大切になってきます。

アクティビティについてよく分からないよという方は次の記事で解説しています。

アプリのライフサイクルの流れ

アプリが起動するとライフサイクルは、Craete, Start, Resume, Pause, Stop, Destroy の順で実行されます。これらは、アクティビティの中でコールバックとして呼ばれるのでUIの更新や通信処理などを行うことになります。ライフサイクルの各処理について解説していきます。これらは、LifecycleObserverを利用して受け取ることも可能になっています。

onCreate

システムがアクティビティを作成したときに最初に呼ばれるメソッドです。1度呼ばれるとアクティビティが作成済になるので、2度目に呼ばれることはありません。LayoutファイルでUIを作っている場合は、このときに setContentView を呼び出すことで反映できます。以前に onSaveInstanceState が呼ばれていると、このメソッドが呼ばれた時に前の状態にする処理が行えるようになっています。

onStart

onCreateの直後に、アクティビティが起動すると呼ばれるメソッドです。このタイミングでUIの初期化などが行います。また、アクティビティが非表示の時が続いた時などに呼ばれることがあります。

onResume

onStartの直後やアクティビティが再開するときに呼ばれるメソッドです。このメソッドが呼ばれるとユーザーがUIを操作できるようになります。カメラのプレビューなど特定のコンポーネントは、このタイミングで実行する必要がある。また、以前にonPauseを実行した際に解放したコンポーネントなどは、このタイミングで初期化する必要があります。

onPause

ユーザーがアクティビティを離れるときに呼ばれるメソッドです。このときアクティビティが必ず破棄されるわけではありません。電話の着信など割り込みがあった場合によく呼ばれます。また、アクティビティが完全に停止する場合はonStopで状態保持の処理を行います。

onStop

表示されなくなったアクティビティなどは、停止状態になりこのメソッドが実行されます。アニメーションの停止などをこのタイミングで呼びます。アクティビティが再開する時は、onRestartが呼ばれその後にonStartが実行されます。

onDestroy

アクティビティが停止して破棄される場合に呼ばれます。ユーザーがアクティビティを閉じた場合や、finishが実行された場合に呼ばれます。また、デバイスの向きが変更された時など構成が変更になる場合もあります。データをデバイスに保持する必要がある場合などは、このタイミングで保持する必要があります。

ライフサイクルを終了してもアクティビティの状態を維持する

アクティビティのライフサイクルの中で、アプリの状態や動作によってアクティビティが破棄されるケースが何度かあります。戻るボタンを押した時やfinishを呼び出した時などが該当します。破棄されたあとでもアクティビティの状態を維持したい時は、破棄されるタイミングでBundleに記録に記録することで、次回起動したときに元に戻す処理が行えます。

アクティビティの状態を戻すにはonSaveInstanceStateを利用

このメソッドは、アクティビティが破棄されるタイミングで状態を保持するために呼ばれます。Bundleオブジェクトにキーと値をペアにして追加することで状態を保存できます。なので再度起動したときなどに、onCreateのタイミングでBundleの値を読み込んで状態を復帰します。

override fun onSaveInstanceState(outState: Bundle?) {
	// アクティビティの状態をキーと値のペアで追加
	outState?.run {
		putString("name", "Taro Tanaka")
		putInt("age", 22)
	}

	// 保存
	super.onSaveInstanceState(outState)
}

Androidアプリ開発の参考書

土日などに時間を確保してやりたいときにおすすめの本です。iPhoneアプリ開発の手順を一通り理解できるように設計されています。アプリ開発を「体験」することにこだわっていて、開発したことがない人にも楽しめる内容になっています。

たった2日でマスターするiPhoneアプリ開発集中講座 Xcode 11 Swift 5対応

また、もっとAndroidアプリ開発に必要な知識を学びたいという人向けに、次の記事で参考になる本を紹介しています。初級〜中上級まで紹介しているので、ぜひ参考にしてみてください。

AndroidアプリのActivityとFragmentの違いや使い方を詳しく解説Prev

決算書の勉強したい人におすすめの「世界一楽しい決算書の読み方」を紹介!Nextresource

Related post

  1. debugging

    Androidアプリ開発

    Androidアプリ開発で初心者が覚えるべきデバッグ3つの手法

    Androidアプリを作り始めるといろんな不具合やエラーに悩まされるこ…

  2. Androidアプリ開発

    初心者向けにAndroidアプリ開発からリリースまでの手順を丁寧に解説!

    Androidのアプリ作ってリリースをしてみたい!だけど、実際に何をし…

  3. Androidアプリ開発

    Androidアプリ開発で覚えておきたいKotlinの記法を紹介

    Androidアプリ開発するためにKotlinを利用するケースは多くな…

  4. Androidアプリ開発

    Androidアプリ開発のLayoutの基礎的な使い方をわかりやすく解説!

    Androidアプリ開発で、欠かせない要素となっているのがレイアウトで…

  5. Androidアプリ開発

    Androidアプリでダークモードに対応する方法を紹介

    アプリやOSのUIを全体的に黒を基調としたデザインにする機能で、201…

  6. Androidアプリ開発

    AndroidアプリのActivityとFragmentの違いや使い方を詳しく解説

    アプリを作り始めで画面の作り方がよく分からない、ActivityやFr…

PAGE TOP