Androidの浅談activityライフサイクル

6997 ワード

Androidの浅談activityライフサイクル
一.activityの概要
Activityは、Androidコンポーネントの中で最も基本的で最も一般的な4つのコンポーネント(Activity、Serviceサービス、Content Providerコンテンツプロバイダ、BroadcastReceiverブロードキャスト受信機)の1つです.
Activityは、タスクを完了するためにインタラクティブに使用できる画面を提供するアプリケーションコンポーネントです.
Activityのすべての操作はユーザーと密接に関連しており、setContentView(View)で指定したコントロールを表示できるユーザーとのインタラクションを担当するコンポーネントです.
Androidアプリケーションでは、Activityは通常、いくつかのコントロールを表示したり、ユーザーのイベントをリスニングしたり処理したりして応答する個別の画面です.Activity間はIntentで通信します.
二.詳細な説明
AndroidではActivityには4つの基本状態があります.
Active/Running
新しいActivityがスタックに起動すると、画面の一番前に表示され、処理はスタックの一番上(Activityスタックの一番上)にあり、アクティブまたは実行ステータス(active or running)と呼ばれる可視でユーザーとインタラクティブなアクティブ状態になります.
Paused
Activityがフォーカスを失うと、新しい非フルスクリーンのActivityまたは透明なActivityがスタックの上部に配置され、その状態を一時停止状態(Paused)と呼ぶ.この時点でウィンドウマネージャと接続を維持し、Activityは依然として活気を保っています(すべての状態、メンバー情報、ウィンドウマネージャと接続を維持しています)が、システムメモリが極端に低下している場合は強制的に終了します.したがって、フォーカスが失われているため、ユーザーと対話することはできません.
Stopped
あるActivityが別のActivityで完全に覆われている場合、停止状態(Stopped)と呼ばれます.すべてのステータスとメンバー情報を保持しますが、表示されないため、ウィンドウが非表示になり、システムメモリが他の場所で使用される必要がある場合、StoppedのActivityは強制的に終了します.
Killed
ActivityがPausedまたはStoppedステータスの場合、Activityをメモリから削除できます.Androidシステムは、Activityの終了を要求するか、プロセスを直接終了するかの2つの方法で削除できます.Activityが再びユーザーに表示されると、前の状態を再開してリセットする必要があります.
Activityが異なる状態間で遷移するタイミングと条件を上図のように示す.
Activityスタック
AndroidはActivityスタックを管理する方法であり、Activityのインスタンスの状態がスタック内の位置を決定する.フロントにあるActivityは常にスタックの先端にあり、現在のステージのActivityが異常またはその他の理由で破棄されると、スタックの2番目のレイヤにあるActivityがアクティブになり、スタックの上部に浮上します.新しいActivityがスタックに入ると、元のActivityはスタックの2番目のレイヤに押し込まれます.スタック内のActivityの位置変化は、異なる状態間の遷移を反映する.
Activityの状態とスタック内の位置関係を上図に示す.
ライフサイクル
ライフサイクル
呼び出し時間
onCreate()
activityが初めて作成されたときに呼び出されます.この方法では、すべての静的作成、viewsの作成、listsへのデータのバインドなどを行う必要があります.保存されたステータスがある場合は、activityの最近のステータスを含むbundleも提供されます.onStartメソッドは常にこのメソッドの後に呼び出されます
onRestart()
あなたのactivityが停止した後に呼び出され、再開する前に呼び出されます.
onResume()
Activityがユーザとのインタラクションを開始すると呼び出されます.今、あなたのactivityはactivityスタックの先端にあり、ユーザー入力に使用され、onPauseの後に呼び出されます.
onPause()
システムが以前のactivityを再開しようとすると呼び出され、典型的なアプリケーションは、まだ保存されていないデータを現在のデータにコミットし(データ更新を保存することを意味する)、animationsやその他のCPUを消費する可能性のある操作を停止するために使用される.このメソッドの実装は、次のactivityがこのメソッドが戻るまで再開されないため、迅速に行わなければならない.
onStop()
別のactivityが再開され、現在のactivity(スタック内)が上書きされているため、activityがユーザーに表示されなくなった場合に呼び出されます.新しいactivityが起動されたり、存在するactivityがフロントに戻ったり、現在のactivityが破棄されたりします.Activityがフロントに戻ってユーザーと対話する場合、このメソッドの後にonReatartメソッドが呼び出され、現在のactivityが消滅する場合、onDestroyメソッドはこのメソッドの後に呼び出されます.
onDestroy()
これはあなたのactivityが消滅したときに受信した最後の方法です.このメソッドを呼び出すには、finishメソッドを呼び出すことで実現できるactivityが完了する2つのケースがあります.システムはactivityのインスタンスを破棄して空間を解放します.2つのシナリオを区別するにはisFinishメソッドを使用します.この方法はonPauseメソッドでよく用いられ,activityが一時停止するか終了するかを判断する.
1つのライフサイクルのプレゼンテーションを上図に示します.
三.コードの例
package com.example.lenovo.text_1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity
{
    private static final String TAG = "activity";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        setContentView(R.layout.activity_main);

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        Log.d(TAG, "onPostCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d(TAG, "onPostResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }
}

このクラスには9つの方法があり、それぞれ異なるメッセージを印刷します.それらはそれぞれ:onCreate,onPostCreate,onStart,onRestart,onResume,onPostResume,onDestroy,onPause,onStop
プログラムを起動すると、まずActivityに入り、LogCatの出力情報を見てみましょう.
このことから、Activityを開くと、呼び出し順序は、onCreate->onStart->onPostCreate->onResume->onPostResumeである
参考記事:陳如水さんのブログ:【Androidノート8】androidのactivityの完全ライフサイクルBensonさんのブログ:Activityライフサイクルの詳細