先看一下官方給出的圖:android
總結一下上圖spa
主要的回調方法
包括:code
onCreate 、onStart 、onResume 、onPause 、onStop 、onDestroy 、onRestart
blog
給出一張方便記憶的圖:生命週期
這些方法都是兩兩對應的:進程
1.onCreate建立與onDestroy銷燬; 2.onStart可見與onStop不可見; 3.onResume可編輯(即焦點)與onPause; 4.onRestart:在Activity被onStop後,可是沒有被onDestroy,在再次啓動此Activity時就調用onRestart(而再也不調用onCreate)方法;若是被onDestroy了,則是調用onCreate方法。get
保存數據必須在onPause方法中進行it
經過滑動卡片
刪除應用殺死進程的時候,或者經過應用管理
殺死進程的時候,只有棧裏面的第一個沒有銷燬的activity執行ondestroy方法,通常都是mainActivity,其它activity均不執行ondestroy。方法
Android何時只會調用onPause()而不會調用onStop()?im
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