1. 程式人生 > >Activity的四種載入模式詳解(standard singleTop singleTask singleInstance)

Activity的四種載入模式詳解(standard singleTop singleTask singleInstance)

最簡單的理解

activity的四種載入模式

android的多activity開發中,activity之間的跳轉可能需要有多種方式,有時是普通的生成一個新例項,有時希望跳轉到原來某個activity例項,而不是生成大量的重複的activity。載入模式便是決定以哪種方式啟動一個跳轉到原來某個Activity例項。

android裡,有4activity的啟動模式,分別為: standard, singleTop, singleTasksingleInstance, 其中standardsingleTop類似, 

singleTasksingleInstance類似, 用法如下:

(1).standardsingleTop

這兩種載入模式下, 同一個task中可以存在一個activity的多個例項並且可以位於activity棧的任意位置。

先舉個例子:

假設目標taskactivity棧為: A->B->C->D(棧底->棧頂)

在程式中呼叫startActivityD) 

如果Dstandard模式, 則activity棧變為:

A->B->C->D->D, 也就是會重新建立一個

D例項

如果DsingleTop模式, 則activity棧變為

A->B->C->D, 不會建立D例項, 就是說如果D在目標task activity棧的棧頂, 則不會建立新的例項, 而是呼叫DonNewIntent()方法, 反之如果D不在目標task activity棧的棧頂, 則會重新建立一個D例項

(2). singleTasksingleInstance

這兩種載入模式下, 同一個task中只會存在一個activity

的例項, 如果通過startActivity()啟動,則呼叫onNewIntent()方法, 而不是建立一個新的例項。這兩種模式下, activity例項均位於activity棧的棧底。

這兩種載入模式的區別:

假設一個Activity的例項採用如下兩種載入模式:

singleTask:

   如果A呼叫startActivityB)啟動B例項, 則AB位於同一個task中。

singleInstance:

   如果A呼叫startActivityB)啟動B例項, 則系統會自動給intent新增一個屬性FLAG_ACTIVITY_NEW_TASK, 將B例項放入到一個新的task中, 也就是說A例項所在的task中只能有A自己, 不能存在其他例項