Activity上有Dialog的時候按Home鍵時的生命週期
阿新 • • 發佈:2019-01-29
對於學習Android的朋友來說Activity的7個生命週期肯定不陌生,但是有些極端情況對於剛接觸Android的朋友們來說分析生命週期可能就有些困難。問題如題,下來我們就結合結果來分析一下整個過程。
如下為我們邏輯的程式碼其實就是一個按鈕的監聽,當點選事件觸發的時候出現一個不可取消的AlertDialog元件,之後我們重寫各個生命週期觸發的方法並且列印日誌:
public class MainActivity extends AppCompatActivity { private Button button; private String TAG = "MainActivity"; public void init(){ button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) .setIcon(R.mipmap.ic_launcher_round) .setCancelable(false) .setMessage("Error") .setTitle("Warring") .show(); } }); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } protected void onStart(){ Log.d(TAG,"onStart方法正在執行"); super.onStart(); } protected void onResume(){ Log.d(TAG,"onResume方法正在執行"); super.onResume(); } protected void onPause(){ Log.d(TAG,"onPause方法正在執行"); super.onPause(); } protected void onStop(){ Log.d(TAG,"onStop方法正在執行"); super.onStop(); } protected void onDestroy(){ Log.d(TAG,"onDestroy方法正在執行"); super.onDestroy(); } }
我們點選按鈕之後得到如下結果:
我們看到程式的生命週期是:onCreate() -> onStart() -> onResume -> onPause() -> onStop()
其實就是一個很正常的Activity生命週期,並沒有什麼特別的地方,但是注意onPause方法和onStop方法是在我點選Home鍵之後才有的,這就說明對話方塊的出現並沒有使Activity進入後臺。而是點選Home鍵才使Activity進入後臺工作。
問題就在這裡,我開始的疑問是:明明我沒有辦法對Activity的其他部件進行操作了為什麼Activity沒有進入後臺,這裡就要注意。我們彈出的AlertDialog對話方塊實際上是Activity的一個元件,我們對Activity並不是不可見而是被一個佈滿螢幕的元件覆蓋掉了其他元件,所以我們無法對其他內容進行操作,也就是AlertDialog實際上是一個佈滿全屏的元件。
當我們點選了Home鍵後Activity才真正地進入後臺工作,其實也就是我們看到的正常的Activity執行時點選Home鍵時的生存週期,只是我們被AlertDialog這個元件所迷惑。