1. 程式人生 > >面試題整理_Activity的奇葩生命週期

面試題整理_Activity的奇葩生命週期

昨天面試官問了一個關於Activity生命週期的奇葩問題,這裡給大家簡單說一下

程式碼是如下,他在onCreate方法裡面直接呼叫finish(); 問我生命週期的列印

菜鳥如我,我的回答是都生命週期都會執行.因為我想了一下生命週期的那個圖,我覺得生命週期不會說跳過去一個去執行,圖上沒有說onCreate直接指向onDestroy的

如果你和我想的一樣,哥們兒大錯特錯啦!!

看執行有圖有真相:

package com.lizhenbo.helloworld;

import android.app.Activity;
import android.os.Bundle;
import
android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("tag"
, "onCreate"); finish(); } @Override protected void onStart() { super.onStart(); Log.i("tag", "onStart"); } @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", "onDestroy"); } }

列印結果:
在onCreate方法裡面直接呼叫finish();
這裡寫圖片描述
在onStart方法裡面直接呼叫finish();
這裡寫圖片描述
在onResume方法裡面直接呼叫finish();
這裡寫圖片描述
為什麼會這樣呢??
我認為是這樣的,
onCreate–>onDestroy
onStart–>onStop
onResume–>onPause
這6個週期是相互對應的,
建立了就必須被銷燬;
開始了就必須先停止;
可見了就必須先不可見.

也就是說就像蓋\拆樓房一樣,
第一層好了就必須拆第一層;
第二層好了就必須拆第二層;
第三層好了就必須拆第三層.

也就是說,如果剛蓋好第一層就想拆掉,為什麼還有把第二層,第三層蓋好再拆呢??

所以:
如果Activity在onResume(可見)之前就需要被銷燬時,onPause(不可見)也也不會執行;
如果Activity在onStart(開始)之前就需要被銷燬時,onStop(停止)也不會執行;