Activity的四種載入模式詳解(standard singleTop singleTask singleInstance)
最簡單的理解
activity的四種載入模式
在android的多activity開發中,activity之間的跳轉可能需要有多種方式,有時是普通的生成一個新例項,有時希望跳轉到原來某個activity例項,而不是生成大量的重複的activity。載入模式便是決定以哪種方式啟動一個跳轉到原來某個Activity例項。
在android裡,有4種activity的啟動模式,分別為: standard, singleTop, singleTask和singleInstance, 其中standard和singleTop類似,
(1).standard和singleTop
這兩種載入模式下, 同一個task中可以存在一個activity的多個例項, 並且可以位於activity棧的任意位置。
先舉個例子:
假設目標task的activity棧為: A->B->C->D(棧底->棧頂)
在程式中呼叫startActivity(D)
如果D是standard模式, 則activity棧變為:
A->B->C->D->D, 也就是會重新建立一個
如果D是singleTop模式, 則activity棧變為:
A->B->C->D, 不會建立D例項, 就是說如果D在目標task 的activity棧的棧頂, 則不會建立新的例項, 而是呼叫D的onNewIntent()方法, 反之如果D不在目標task 的activity棧的棧頂, 則會重新建立一個D例項
(2). singleTask和singleInstance
這兩種載入模式下, 同一個task中只會存在一個activity
這兩種載入模式的區別:
假設一個Activity的例項A 採用如下兩種載入模式:
singleTask:
如果A呼叫startActivity(B)啟動B例項, 則A和B位於同一個task中。
singleInstance:
如果A呼叫startActivity(B)啟動B例項, 則系統會自動給intent新增一個屬性FLAG_ACTIVITY_NEW_TASK, 將B例項放入到一個新的task中, 也就是說A例項所在的task中只能有A自己, 不能存在其他例項