Android-保你能記住的生命週期教程

原文:http://tryenough.com/android-lifecycle

先看一下官方給出的圖:

總結一下上圖

主要的回調方法包括:

onCreate 、onStart 、onResume 、onPause 、onStop 、onDestroy 、onRestart

原文:http://tryenough.com/android-lifecycle

給出一張方便記憶的圖:

這些方法都是兩兩對應的:

1.onCreate創建與onDestroy銷燬;
2.onStart可見與onStop不可見;
3.onResume可編輯(即焦點)與onPause;
4.onRestart:在Activity被onStop後,但是沒有被onDestroy,在再次啓動此Activity時就調用onRestart(而不再調用onCreate)方法;如果被onDestroy了,則是調用onCreate方法。

保存數據必須在onPause方法中進行

原文:http://tryenough.com/android-lifecycle

通過滑動卡片刪除應用殺死進程的時候,或者通過應用管理殺死進程的時候,只有棧裏面的第一個沒有銷燬的activity執行ondestroy方法,一般都是mainActivity,其它activity均不執行ondestroy。

Android什麼時候只會調用onPause()而不會調用onStop()?

原文:http://tryenough.com/android-lifecycle

onPause是失去焦點,onStop是不可見時調用,只要Activity失去了焦點還可見就會只調用onPause不調用onStop,常見是translucent(半透明) activity擋住當前Activity。

網上很多人說彈出Dialog時只會調用onPause()而不會調用onStop(),其實是錯誤的說法,原因是必須使Activity離開前臺纔會調用onPause,也即是退出棧頂。但是Dialog並不會使Activity離開棧頂。所以答案應該是此時既不會調用onPause()也不會調用onStop()。

onStop不調用的場景

我們知道,Activity A打開B,流程是這樣的:

onCreateA - onStartA - onResumeA - onPauseA - onCreateB - onStartB - onResumeB - onStopA

然後按返回到A的流程是這樣的:

onPauseB - onStartA - onResumeA - onStopB - onDestoryB

但是如果在B打開的生命週期方法onResume中直接finish當前的B,那麼此時返回到A的流程就會缺少onStartA。原因是因爲此時對於系統來說A一直是可見的。

onPauseB - onResumeA - onStopB - onDestoryB

原文:http://tryenough.com/android-lifecycle

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章