AndroidにおけるActivityライフサイクル分析:Androidにおける縦画面切り替え時のライフサイクルプロセス

6216 ワード

最近Androidの面接で、今日はこのような問題が出ました.
 
ライフサイクルはこうだったと思っていました
onCreate --》 onStart -- ---》 onResume ---》 onPause ---》 onStop ---》 onRestart ---》 onResume ---》 onPause ---》 onStop
 
家に帰ってから自分でパソコンでデモンストレーションし直して、別の結果が出て、やはり実践して真の知識を出しました.はい、まずコードをつけて、必要な友达に直接コードを貼ってください.
package com.king.review.base;



import android.app.Activity;

import android.os.Bundle;

import android.util.Log;



/**

 * author: king.liu

 * data:2013-10-8   8:02:40

 * do:TODO

 */



public class ActivityLife extends Activity {

    

    public static final String TAG = "ActivityLife";

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        

        Log.i(TAG, "onCreate ...");

    }

    

    @Override

    protected void onStart() {

        super.onStart();

        Log.i(TAG, "onStart ...");

    }

    

    @Override

    protected void onRestart() {

        super.onRestart();

        Log.i(TAG, "onRestart ...");

    }

    

    @Override

    protected void onResume() {

        super.onResume();

        Log.i(TAG, "onResume ...");

    }

    

    @Override

    protected void onPause() {

        super.onPause();

        Log.i(TAG, "onPause ...");

    }

    

    @Override

    protected void onStop() {

        super.onStop();

        Log.i(TAG, "onStop ...");

    }

    

    @Override

    protected void onDestroy() {

        super.onDestroy();

        Log.i(TAG, "onDestory ...");

    }



}

Activityの問題について話した以上、私は完全にやってみます.
まずプログラムが起動すると、印刷されたlog:
10-08 20:32:52.231: I/ActivityLife(1188): onCreate ...10-08 20:32:52.251: I/ActivityLife(1188): onStart ...10-08 20:32:52.251: I/ActivityLife(1188): onResume ...
 
つまり、プロセスはonCreate----->onStart->>onResume.
 
をクリックしてボタンを返すと、印刷されたlog:
10-08 20:33:49.282: I/ActivityLife(1188): onPause ...10-08 20:33:50.401: I/ActivityLife(1188): onStop ...10-08 20:33:50.401: I/ActivityLife(1188): onDestory ...
流れは:onPause----->onStop----->onDestory
 
通常の流れをまとめると、onCreate--->onStart->>onResume->onPause--->onStop--->onDestory
 
 
縦横画面切り替え時のライフサイクルについて説明します.
最初の起動時:
10-08 20:46:43.811: I/ActivityLife(1188): onCreate ...10-08 20:46:43.831: I/ActivityLife(1188): onStart ...10-08 20:46:43.831: I/ActivityLife(1188): onResume ...
ライフサイクルは次のとおりです:onCreate->onStart->onResume.
 
次に、次のように切り替えます.
10-08 20:47:56.551: I/ActivityLife(1188): onPause ...10-08 20:47:56.561: I/ActivityLife(1188): onStop ...10-08 20:47:56.561: I/ActivityLife(1188): onDestory ...10-08 20:47:56.631: I/ActivityLife(1188): onCreate ...10-08 20:47:56.631: I/ActivityLife(1188): onStart ...10-08 20:47:56.651: I/ActivityLife(1188): onResume ...
ライフサイクルは、onPause-->onStop----->onDestory----->onCreate->onStart->onResume;
 
次に画面を切り替えます.
10-08 20:49:24.601: I/ActivityLife(1188): onPause ...10-08 20:49:24.601: I/ActivityLife(1188): onStop ...10-08 20:49:24.601: I/ActivityLife(1188): onDestory ...10-08 20:49:24.621: I/ActivityLife(1188): onCreate ...10-08 20:49:24.631: I/ActivityLife(1188): onStart ...10-08 20:49:24.631: I/ActivityLife(1188): onResume ...
ライフサイクルは、onPause--->onStop----onDestory----onCreate->onStart->onResume;
 
以上、Androidでの縦横画面切り替え時のライフサイクルは次のとおりです.
onCreate--->onStart--->onResume.--》onPause--->onStop---》onDestory--->onCreate--->onCreate--->onStart--->onResume;
onCreate --》 onStart -- ---》 onResume ---》 onPause ---》 onStop ---》 onRestart ---》 onResume ---》 onPause ---》 onStop
ここで特に注意したいのは、画面が切り替わると、その前の画面の状態が破棄され(onDestory)、新しい画面でライフサイクルが再開されることです.(onCreate->onStart--->onResume)
 
私が犯した間違いは、前にスクリーンライフサイクルがマウントされていたと思って、再起動(onRestart)したことです.のこの問題はよくあるので、ちょうど仲間と共有できます.