はじめに:Activityのライフサイクルは必ず押さえたい
iOSでもAndroidでもモバイルアプリ開発に必須となるActivityのライフサイクル。ライフサイクルを知ることがモバイル開発の第一歩だと思っています。
AndroidのActivityのライフサイクルに関して調べたので記載していきます。

そもそもActivityのライフサイクルとは?
スマホの動作としてアイコンをタップしてアプリの起動、バックグラウンドへの遷移、アプリの再開、アプリの終了などアプリケーションの状態は変化していきます。

それがActivityのライフサイクルと呼ばれています。
ライフサイクルメソッド
その変化する状態に応じて適切な処理としてActivityのライフサイクルに合わせたライフサイクルメソッドが用意されています。
Activityのライフサイクルとライフサイクルメソッドの全景は以下のようになっています。

アクティビティのライフサイクルに関する簡略な図
- onCreate():アクティビティの開始時に呼ばれます。ほとんどの初期化に理想的な場所です。
- onStart():onCreateの後、また再度画面に表示されようとしている時に呼ばれます。
- onResume():onStartの後に呼ばれます。活動中の状態を示しています。
- onPause():別のアクティビティが前面に出ようとする時に呼ばれます。バックグラウンド遷移時にも呼ばれます。
- onStop():onPauseの後に呼ばれます。アクティビティが完全に見えなくなった状態です。
- onDestroy():アクティビティを破棄した時に呼ばれます。アプリを終了した時などです。
- onRestart():アクティビティが再度前面に出ようとする時に呼ばれます。この後に呼ばれるのはonStartです。
ライフサイクルの挙動を確かめる
冒頭に貼ったgifアニメーションのアプリで挙動を調べました。
内容は全てのライフサイクルメソッドでToastを呼び、
アプリ起動→バックグラウンドへ→フォアグラウンドへ→アプリ終了の順番でアプリを動作させています。
結果は以下です。

public class MainActivity extends AppCompatActivity {
private final String TAG = "LOG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Static Work:Creating the views, binding data ...
Log.i(TAG,"OnCreate() is called");
Toast.makeText(this, "OnCreate() is called", Toast.LENGTH_SHORT).show();
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG,"OnStart() is called");
Toast.makeText(this, "OnStart() is called", Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG,"onResume() is called");
Toast.makeText(this, "onResume() is called", Toast.LENGTH_SHORT).show();
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG,"onRestart() is called");
Toast.makeText(this, "onRestart() is called", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG,"onPause() is called");
Toast.makeText(this, "onPause() is called", Toast.LENGTH_SHORT).show();
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG,"onStop() is called");
Toast.makeText(this, "onStop() is called", Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG,"onDestroy() is called");
Toast.makeText(this, "onDestroy() is called", Toast.LENGTH_SHORT).show();
}
}
さいごに
Activityのライフサイクルを知ることで適切な場所に処理を配置することが出来るようになります。
読んで頂きありがとうございました。
コメント