Android中的Activity啟動模式
Android中Activity是我們最常用的元件,我們需要深入的瞭解下activity的四種啟動模式:
- standard
- singleTop
- singleTask
- singleInstance
standard 標準啟動模式
顧名思義,這是Android的預設啟動模式,當我們每次啟動一個activity時,系統都會新建立一個例項,不管這個例項是否存在,他的生命週期函式會依次被呼叫。我們多次啟動同一個activity系統會建立多個例項同時把他們一一放入任務棧中,我們點選back返回鍵時,會一一回退。
singleTop 棧頂複用模式
在該模式下,如果新的activity已經位於任務棧的棧頂,那麼此activity不會被重新建立,同時他的onNewIntent會被回撥,通過該方法我們可以取出當前請求的資訊,這時候onCreate,onStart不會被呼叫。如果新的activity不是在棧頂,但是已存在,那麼還是會重新建立例項
singleTask 棧內複用模式
在activity棧內,只要有一個例項存在,多次啟動activity都不會重新建立例項,系統會回撥onNewIntent函式,和singleTop效果一樣。這裡會分幾種情況:
- 當前任務棧S1中情況為ABC,這時D以singleTask模式啟動,要求任務棧為S2,由於S2和D都不存在,這時候系統會先建立任務棧S2,然後再建立D的例項並將其放入到S2中
- D的要求任務棧為S1,其他都和1相同,那麼系統會直接建立D然後放入到S1中。
- 如果當前任務棧情況為ADBC,這時D以singleTask模式啟動,要求任務棧為S1.這時系統會將D切換到棧頂,同時呼叫onNewIntent函式。由於singleTop具有clearTop的效果,會導致所有在D上面的Activity全部出棧,所以最終變成了AD。
singleInstance 單例項模式
這是一種加強型的singleTask模式,他除了具有所有singleTask的特性外,還只能單獨處於一個單獨的任務棧中。