Activity生命週期
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onRestart()
- onDestroy()
-
【備註:】A、七個生命週期組合:
- onCreate、onStart、onResume:啓動應用程序
- onPause、onStop:失去焦點
- onRestart、onStart、onResume:重新獲得焦點
- onPause、onStop、onDestroy :退出應用程序
B、七個生命週期按階段劃分:- onCreate() --- onDestroy() 完整生命週期 The entire lifetime
- onStart() --- onStop() 可見生命週期 The visible lifetime:
- onResume() --- onPause() 前沿生命週期(焦點生命週期) The foreground lifetime:
(二)、Activity的四種啓動模式:
1. standard(備註:standard是系統默認的啓動模式。)
標準啓動模式,每次激活Activity時都會創建Activity,並放入任務棧中。每個窗體的getTaskId()保持不變,但是this.hashCode()發生改變。
2. singleTop
如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,而不會創建新的Activity對象,不過它會調用onNewIntent()方法。如果棧頂部不存在就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。會回調onNewIntent()方法。
3. singleTask
如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。
和singleTop在名字上即可看出區別,即singleTop每次只檢測當前棧頂的Activity是否是我們需要請求創建的,而singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置爲棧頂。
4. singleInstance
與singleTask模式的區別是存放singleInstance模式窗口對象的回退棧不能有其他任何窗口對象。因此如果該窗口不存在,則要新建任務來存放該singleInstance模式窗口。也就是說getTaskId()會發現任務id發生了變化。
此啓動模式和我們使用的瀏覽器工作原理類似,在多個程序中訪問瀏覽器時,如果當前瀏覽器沒有打開,則打開瀏覽器,否則會在當前打開的瀏覽器中訪問。此模式會節省大量的系統資源,因爲他能保證要請求的Activity對象在當前的棧中只存在一個。