Android (Launch Mode) 四種啓動模式

1.standardthis

\

經過textView.setText(this+""); 根據HashCode(activityId)可判斷出每次都建立了新Activity : startActivity(ActivityX.this,ActivityX.class)。code

上圖中A一、A二、A3是表明ActivityA的三個實例。生命週期

2.singleTopget

\

若是棧頂已有要建立的Activity實例,則將intent發送給該實例(hashcode=41e706d0)而不發給新實例。用singleTZ喎�"/kf/ware/vc/" target="_blank" class="keylink">vcMSjyr2/yb3ivvbVu7altuC49tbYuLTP4M2stcRBY3Rpdml0ebXEzsrM4qGjPC9wPgo8cD7J+sP81tzG2qO6PC9wPgo8cD48aW1nIHNyYz0="/uploadfile/Collfiles/20140216/2014021609080661.jpg" alt="\">hash

注:其中填充爲綠色的兩個方塊是表明同一個Activity實例(activityId相同)。it

 

若是是A-->B-->A,以下:class

 

A:singleTopfile

B:standard請求

\

從B跳到A時,A若不在棧頂則和standard模式效果同樣建立一個新A實例。方法

如果A-->B-->A-->B-->A,這時的運行狀況以下:

\

經過HashCode能夠很清楚地知道是一個新實例仍是一個已存在的實例。

生命週期(A-->B-->A):

\

 

3.singleTask

A:singleTask

B:standard

A-->B-->A-->B:

\

注:綠色方塊是指同一個Activity實例。關於它的生命週期,經過Intent啓動一個Activity,若是系統已經存在一個實例,系統就會將請求發送到這個實例上,但這時系統不會再調用onCreate來處理請求數據,而是調用onNewIntent方法。

4.singleInstance

A:standard

B:singleInstance

注:一個task就是一個棧,一個棧裏可放入多個Activity。taskId=this.getTaskId()。

taskId=1671的棧先回退完,以後再回退taskId=1672的棧。

相關文章
相關標籤/搜索