首先我們來一張神圖介紹一下基礎:
Activity生命周期
-
onCreate
:表示activity正在創建,可以做一些初始化的工作,比如加載界面布局資源。 -
onRestart
:表示activity正在重新啟動,一般情況下當當前Activity從不可見到可以見的時候,該方法會被調用。 -
onStart
:表示Activity正在被啟動,activity可見但是沒有出現在前臺,不可以操作。 -
onResume
:表示activity已經可見了,并且出現在前臺活動,可以做一些儲存數據的操作,但不能做太耗時操作。 -
onPause
:表示activity正在停止,處于可見但是不可以操作。 -
onStop
:表示Activity即將停止,activity變得不可以見,可以做稍微重點的回收工作。 -
onDestory
:表示activty即將被銷毀,我們可以做一些回收工作和資源的最終釋放。
下面要介紹幾個冷知識
當前Activity A啟動一個Activity B的時候一般會調用A的
onPause
->onStop
,但是onStop
不是必然的 ,當B采用了透明主題的時候,A是不會調用onStop
的(這也是是側滑退出的實現原理)當前Activity A啟動一個Activity B的時候,只有當A的
onPause
方法執行完畢的時候B的onCreate
方法才會執行,但是A的onStop
就不一定了,可能會在B的onResume
之后。當前Activity A啟動一個Activity B的時候,但是又切換回A的時候一般會調用A的
onNewIntent
->onRestart
->onStart
->onResume
。(目前針對只在同一個堆棧中的情況)但是A如果被系統回收的情況,調用如下onCreate
->onStart
->onResume
當用戶從任務欄殺進程的時候是不會走接下來的
onDestory
等生命周期的,但是home出去的時候會走onPause
->onStop
當使用
System.exit(0)
來退出當前進程的時候,不會走當前Activity A任何生命周期,同時上一個Activity B(不在同一進程)的onActivityResult
不會有正確回調結果,但是在System.exit(0)
前面加一個finish()
之后B的onActivityResult
就會有正確結果,但是A的生命周期不會被調用,finish
方法中的Log不會被打印出來。