1. ホーム
  2. android

[解決済み] Androidのアクティビティライフサイクル - これらのメソッドは何のためにあるのか?

2022-03-21 03:58:18

質問

Androidのアクティビティのライフサイクルはどのようになっていますか?なぜ、似たような鳴動メソッド( onCreate() , onStart() , onResume() ) が初期化中に呼び出され、その他にも非常に多くの ( onPause() , onStop() , onDestroy() ) が最後に呼び出されるのですか?

これらのメソッドはいつ呼ばれ、どのように使うのが正しいのでしょうか?

どのように解決するのですか?

でご覧ください。 アクティビティライフサイクル (at Android Developers)です。

onCreate() :

アクティビティが最初に作成されたときに呼び出されます。ここでは、以下のことを行う必要があります。 ビューの作成、リストへのデータのバインドなど、通常の静的なセットアップをすべて行います。 など。また、このメソッドには アクティビティの以前のフリーズした状態があれば、その状態。常に onStart()によって行われます。

onRestart() :

アクティビティが停止した後、開始される前に呼び出されます。 再び 常にonStart()が続きます。

onStart() :

アクティビティがユーザーに見えるようになったときに呼び出されます。続いて onResume() は、アクティビティがフォアグラウンドになった場合に使用します。

onResume() :

アクティビティがユーザーとのインタラクションを開始するときに呼び出されます。この時 この時点で、アクティビティはアクティビティスタックの最上位にあり、ユーザー への入力が行われる。常に onPause() が続きます。

onPause () :

アクティビティのライフサイクルの一部として、アクティビティが移動するときに呼び出されます。 バックグラウンドになります。 が、(まだ)killされていない。onResume() と対になるものです。 アクティビティBがアクティビティAの前に起動されると、このコールバックがAで呼び出される。 BはAのonPause()が戻るまで作成されないので、onResume()を使用しないように注意してください。 は、ここで長ったらしいことをするのはやめましょう。

onStop() :

ユーザーから見えなくなったときに呼び出されます。次に、あなたは onRestart()、onDestroy()、または何も受信しません。 後のユーザーの活動。 このメソッドは、低メモリ環境では決して呼ばれないかもしれないことに注意してください。 システムに十分なメモリがなく、アクティビティーの メソッドが呼ばれた後、そのプロセスが実行されます。

onDestroy() :

アクティビティが破棄される前に受ける最後の呼び出し。これは は、アクティビティが終了するため(誰かが または、システムが一時的にこの のインスタンスは、スペースを節約するために使用されます。この2つのシナリオは、isFinishing()メソッドで区別することができます。

アクティビティが 初回ロード時 は、以下のように呼び出されます。

onCreate()
onStart()
onResume()

あなたが 電話ボタンをクリック がバックグラウンドになり、以下のイベントが呼び出されます。

onPause()
onStop()

テレフォンダイヤルを終了する を実行すると、以下のイベントが呼び出されます。

onRestart()
onStart()
onResume()

をクリックすると バックボタン を試すか 終了() を実行すると、以下のようにイベントが呼び出されます。

onPause()
onStop()
onDestroy()


活動状況

Android OSは、デバイス上で実行されるアクティビティの管理を支援するために、優先度キューを使用しています。特定のAndroidアクティビティが置かれている状態に基づき、OS内で一定の優先順位が割り当てられます。この優先順位システムにより、Androidは不要になったアクティビティを識別し、OSがメモリとリソースを再利用できるようになります。次の図は、アクティビティがそのライフタイム中に通過する可能性のある状態を示しています。

これらの状態は、以下の3つのグループに大別されます。

アクティブまたはランニング - アクティビティは、アクティビティスタックの最上位として知られるフォアグラウンドにある場合、アクティブまたは実行中とみなされます。これは、Android Activity スタックの中で最も優先度の高いアクティビティと見なされるため、極端な状況においてのみ OS によって強制終了されます。例えば、アクティビティがデバイスで利用可能なメモリよりも多くのメモリを使用しようとすると、UI が応答しなくなることがあります。

一時停止 - デバイスがスリープ状態になるか、アクティビティがまだ表示されているが、新しい、フルサイズでない、または透明なアクティビティによって部分的に隠されると、アクティビティは一時停止したとみなされる。一時停止されたアクティビティは、まだ生きている、つまり、すべての状態とメンバー情報を維持し、ウィンドウ・マネージャに接続されたままである。これは、Android Activityスタックで2番目に高い優先度のアクティビティと見なされ、そのため、このアクティビティを殺すと、Active/Running Activityを安定して応答させるために必要なリソース要件が満たされる場合にのみ、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");
    }
}