面試題整理_Activity的奇葩生命週期
阿新 • • 發佈:2019-02-18
昨天面試官問了一個關於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(停止)也不會執行;