天天看點

自學筆記:Activity的啟動模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT

注:.

四種:      

  1. standard             被啟動就會建立一個新的

  2. singleTop            棧頂單執行個體(當該activity處于task棧頂時,可以複用,直接onNewIntent)                

  3. singleTask           棧中單執行個體(oncreate該activity并銷毀在他之上的其他activity)  

  4. singleInstance       全局單執行個體(應用場景:地圖,Activity初始化需要大量資源)

Intent的标志位FLAG:

Intent.FLAG_ACTIVITY_SINGLE_TOP     與加載模式singleTop功能相同    

Intent.FLAG_ACTIVITY_CLEAR_TOP      銷毀目标Activity和它之上的所有Activity,重新建立目标Activity

Intent.FLAG_ACTIVITY_NEW_TASK          

=============================其他===============================================================      

1. 如果已經啟動了四個Activity:A,B,C和D。在D Activity裡,我們要跳到B Activity,同時希望C finish掉,可以在startActivity(intent)裡的intent裡添加flags标記,如下所示:

1

2

3

<code>Intent intent = </code><code>new</code> <code>Intent(</code><code>this</code><code>, B.</code><code>class</code><code>);</code>

<code>intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);</code>

<code>startActivity(intent);</code>

這樣啟動B Activity,就會把D,C都finished掉,如果你的B Activity的啟動模式是預設的(multiple) ,則B Activity會finished掉,再啟動一個新的Activity B。

 如果不想重新再建立一個新的B Activity,則在上面的代碼裡再加上:

<code>intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);</code>

這樣B Activity就會再建立一個新的了,而是會重用之前的B Activity,同時調用B Activity的onNewIntent()方法。

2. 如果已經啟動了四個Activity:A,B,C和D,在D Activity裡,想再啟動一個Actvity B,但不變成A,B,C,D,B,而是希望是A,C,D,B,則可以像下面寫代碼:

<code>Intent intent = </code><code>new</code> <code>Intent(</code><code>this</code><code>, MainActivity.</code><code>class</code><code>);</code>

<code>intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);</code>

======================隻生成一個Activity執行個體=================================

在一個Activity中,多次調用startActivity()來啟動另一個Activity,要想隻生成一個Activity執行個體,方法有兩種。 

方法一:設定起動模式 

一個Activity有四種啟動模式:standard, singleTop, singleTask, singleInstance。 

standard: 标準模式,一調用startActivity()方法就會産生一個新的執行個體。 

singleTop: 如果已經有一個執行個體位于Activity棧的頂部時,就不産生新的執行個體,而隻是調用Activity中的newInstance()方法。如果不位于棧頂,會産生一個新的執行個體。 

singleTask: 會在一個新的task中産生這個執行個體,以後每次調用都會使用這個,不會去産生新的執行個體了。 

singleInstance: 這個跟singleTask基本上是一樣,隻有一個差別:在這個模式下的Activity執行個體所處的task中,隻能有這個activity執行個體,不能有其他的執行個體。 

這些啟動模式可以在功能清單檔案中進行設定,&lt;activity&gt;中的launchMode屬性。 

方法二:在intent中加标志 

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT這個标志表示:如果這個activity已經啟動了,就不産生新的activity,而隻是把這個activity執行個體加到棧頂來就可以了。 

代碼如下:

<code>Intent intent = </code><code>new</code> <code>Intent(ReorderFour.</code><code>this</code><code>, ReorderTwo.</code><code>class</code><code>);   </code>

<code>intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   </code>

本文轉自 glblong 51CTO部落格,原文連結:http://blog.51cto.com/glblong/1209829,如需轉載請自行聯系原作者

繼續閱讀