注:.
四種:
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執行個體,不能有其他的執行個體。
這些啟動模式可以在功能清單檔案中進行設定,<activity>中的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,如需轉載請自行聯系原作者