Android Activityのライフサイクル確認
はじめに
Android Activityのライフサイクルを確認する目的で、挙動確認用のコードをKotlinで書いてみました。
ライフサイクル
アクティビティのライフサイクルについて | Android デベロッパー | Android Developers
挙動確認用のコード
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textMultiLine" android:maxLines="40" android:minLines="40" android:scrollbars="horizontal" android:singleLine="false" android:text="TextView" android:textSize="24sp" android:textStyle="bold" tools:layout_editor_absoluteX="16dp" tools:layout_editor_absoluteY="16dp" /> </androidx.constraintlayout.widget.ConstraintLayout>
activity_main.xml
package com.example.activitysample import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.TextView import java.time.LocalDateTime import java.time.format.DateTimeFormatter class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) addText("onCreate") } override fun onStart() { super.onStart() addText("onStart") } override fun onRestart() { super.onRestart() addText("onRestart") } override fun onResume() { super.onResume() addText("onResume") } override fun onPause() { super.onPause() addText("onPause") } override fun onStop() { super.onStop() addText("onStop") } override fun onDestroy() { super.onDestroy() val dt = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")) Log.d(MainActivity::class.java.simpleName,dt.plus(" ").plus("onDestroy")) } fun addText(s : String) { val dt = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")) val textView : TextView = findViewById(R.id.textView) if (textView.text.isNotEmpty()) { textView.text = textView.text.toString().plus("\n").plus(dt).plus(" ").plus(s) } else { textView.text = dt.plus(" ").plus(s) } } }
MainActivity.kt
挙動は、TextViewに時刻と一緒に追記する形で実装しました。OnDestroy()メソッドは、TextView表示ではなくLog出力させています。
デバッガで実行してみる
メニューボタンを押して別のアプリを操作後、このアプリに戻ってくるときは
- メニューボタンを押して、別のアプリ起動
- onPause
- onStop
- 別のアプリから戻ってくる
- onRestart
- onStart
- onResume
バックボタンを押すと
- onPause
- onStop
- onDestroy
画面を回転させると、onCreateから実行されます。
それぞれなにを実装する?
onCreate
画面レイアウトの生成やクラスの生成など、アプリ起動後はじめに行う処理を実装します。
onStart
画面コントロールの初期化、クラスの初期化を実装します。
onResume
データベースへの接続やネットワーク接続を行い、
アプリ画面にデータを表示させる処理を実装します。
onPause
画面がバックグラウンドに回るときに呼び出されます。
この場合、アプリは強制終了させられてしまう可能性がありますので、データ保存処理などはここで行います。
データベース、ネットワークなどのdisconnectもここで行います。
onStop
onStartで初期化したクラスのDestroyメソッドをコールする処理を実装します。(クラスの中身をnull)
onDestroy
onCreateで生成したコントロールやクラスの参照変数の破棄を実装します。