3.1日誌跟蹤Activity生命週期
阿新 • • 發佈:2018-12-17
public class QuizActivity extends AppCompatActivity { private static final String TAG = "QuizActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz); Log.d(TAG, "onCreate(Bundle) called"); } /** *注意,先是呼叫了超類的實現方法,然後才呼叫具體的日誌記錄方法。這些超類方 法的呼叫不可或缺。從以上程式碼可以看出,在回撥覆蓋實現方法裡,超類實現方法 總在第一行呼叫。也就是說,應首先呼叫超類實現方法,然後再呼叫其他方法。使 用@Override註解,就是要求編譯器保證當前類擁有你要覆蓋的方法。對於拼寫錯 誤的方法,比如onCreat()編譯器會發出警告 */ @Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart called"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume called"); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause called"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop called"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy called"); } }
開啟App到按返回鍵的過程:
單擊裝置的後退鍵,相當於告訴Android系統:“activity已用完,現在不需要它了。”隨即,系統就銷燬了該activity的檢視及其記憶體裡的相關資訊。這實際是Android系統節約使用裝置有限資源的一種方式。
開啟App到按Home鍵過程:
單擊主螢幕鍵,相當於告訴Android系統:“我去別處看看,稍後可能回來。”此時,Android系統會先暫停,再停止當前activity。這表明,Activity例項已處於停止狀態(在記憶體中,但不可見,不會活動在前臺)。這樣,Android系統就能快速響應,重啟QuizActivity,回到用
戶離開時的狀態。(需要注意的是,停止的activity能夠存在多久,誰也無法保證。系統需要回收記憶體時,它將首先銷燬那些停止的activity。)
從後臺程序回到前臺程序,系統沒有呼叫onCreate()方法(因為Activity例項還在記憶體裡,而是呼叫了onStart()和onResume()方法。QuizActivity只需要重新啟動,然後繼續執行。