Android アクティビティのライフ サイクルとは何ですか? 初期化中に多くの似たようなメソッド ( onCreate()
、、 )が呼び出され、最後に他の多くのメソッド (、、) が呼び出されるのonStart()
はなぜですか?onResume()
onPause()
onStop()
onDestroy()
これらのメソッドはいつ呼び出され、どのように適切に使用すればよいのでしょうか?
ベストアンサー1
見るアクティビティライフサイクル(Android Developers にて)。
アクティビティが最初に作成されるときに呼び出されます。ここで、ビューの作成、リストへのデータのバインドなど、通常の静的セットアップをすべて実行する必要があります。このメソッドは、アクティビティの以前のフリーズ状態 (存在する場合) を含むバンドルも提供します。常に onStart() が続きます。
アクティビティが停止した後、再開される前に呼び出されます。常に onStart() が続きます。
アクティビティがユーザーに表示されるようになったときに呼び出されます。アクティビティがフォアグラウンドになった場合は、onResume() が続きます。
再開():
アクティビティがユーザーとの対話を開始するときに呼び出されます。この時点で、アクティビティはアクティビティ スタックの最上部にあり、ユーザー入力がそこに送られます。常に onPause() が続きます。
アクティビティがバックグラウンドに移行しているが、まだ終了していない場合に、アクティビティ ライフサイクルの一部として呼び出されます。onResume() の対応です。アクティビティ B がアクティビティ A の前で起動されると、このコールバックが A で呼び出されます。B は A の onPause() が返されるまで作成されないため、ここでは長い処理を行わないようにしてください。
ユーザーに表示されなくなったときに呼び出されます。その後のユーザー アクティビティに応じて、onRestart()、onDestroy() のいずれかが返されるか、何も返されません。メモリ不足の状況では、onPause() メソッドが呼び出された後にアクティビティのプロセスを実行し続けるのに十分なメモリがシステムにない場合、このメソッドが呼び出されない可能性があることに注意してください。
破棄():
アクティビティが破棄される前に受け取る最後の呼び出し。これは、アクティビティが終了中 (誰かがアクティビティに対して Finish() を呼び出した場合) か、システムがスペースを節約するためにアクティビティのこのインスタンスを一時的に破棄している場合に発生します。isFinishing() メソッドを使用して、これら 2 つのシナリオを区別できます。
アクティビティが初めて読み込まれるときに、以下のようにイベントが呼び出されます。
onCreate()
onStart()
onResume()
電話ボタンをクリックすると、アクティビティはバックグラウンドになり、以下のイベントが呼び出されます。
onPause()
onStop()
電話ダイヤラーを終了すると、以下のイベントが呼び出されます。
onRestart()
onStart()
onResume()
戻るボタンをクリックするか、アクティビティを終了しようとすると、以下のようにイベントが呼び出されます。
onPause()
onStop()
onDestroy()
Android OS は、デバイス上で実行されているアクティビティの管理を支援するために、優先度キューを使用します。特定の Android アクティビティの状態に基づいて、OS 内で特定の優先度が割り当てられます。この優先度システムにより、Android は使用されなくなったアクティビティを識別し、OS がメモリとリソースを再利用できるようになります。次の図は、アクティビティが存続期間中に通過する可能性のある状態を示しています。
これらの状態は、次の 3 つの主要なグループに分類できます。
アクティブまたは実行中- アクティビティは、フォアグラウンド (アクティビティ スタックの最上位とも呼ばれます) にある場合、アクティブまたは実行中であると見なされます。これは、Android アクティビティ スタック内で最も優先度の高いアクティビティと見なされ、アクティビティがデバイスで使用可能なメモリよりも多くのメモリを使用しようとするなど、UI が応答しなくなる可能性がある極端な状況でのみ OS によって強制終了されます。
一時停止- デバイスがスリープ状態になった場合、またはアクティビティがまだ表示されているが、新しい非フルサイズまたは透明のアクティビティによって部分的に隠れている場合、アクティビティは一時停止されているとみなされます。一時停止されたアクティビティはまだアクティブです。つまり、すべての状態とメンバー情報を維持し、ウィンドウ マネージャーに接続されたままです。これは、Android アクティビティ スタックで 2 番目に優先度の高いアクティビティとみなされるため、このアクティビティを強制終了することでアクティブ/実行中のアクティビティを安定して応答性を保つために必要なリソース要件が満たされる場合にのみ、OS によって強制終了されます。
停止- 別のアクティビティによって完全に隠されているアクティビティは、停止しているかバックグラウンドにあるとみなされます。停止されたアクティビティは、可能な限りその状態とメンバー情報を保持しようとしますが、停止されたアクティビティは 3 つの状態の中で最も優先度が低いとみなされるため、OS は、優先度の高いアクティビティのリソース要件を満たすために、この状態のアクティビティを最初に強制終了します。
*ライフサイクルを理解するためのサンプルアクティビティ**
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
String tag = "LifeCycleEvents";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(tag, "In the onCreate() event");
}
public void onStart()
{
super.onStart();
Log.d(tag, "In the onStart() event");
}
public void onRestart()
{
super.onRestart();
Log.d(tag, "In the onRestart() event");
}
public void onResume()
{
super.onResume();
Log.d(tag, "In the onResume() event");
}
public void onPause()
{
super.onPause();
Log.d(tag, "In the onPause() event");
}
public void onStop()
{
super.onStop();
Log.d(tag, "In the onStop() event");
}
public void onDestroy()
{
super.onDestroy();
Log.d(tag, "In the onDestroy() event");
}
}