- standard
- singleTop
- singleTask
- singleInstance
<activity android:name=".actA" android:launchMode="singleTask"</activity>1.standard
standard為預設值,androidManifest.xml如果沒有設定launchmode,就會以standard來跑,
這個模式,每次都會create一個新的activity
2.singleTop
當你的activity已經是在最上層,就不會在產生一個activity,但如果當下的activity不是在最上層,則會產生一個新的activity。
舉二個例子來說:
A.假設程式只有一個activity,所以無論如何你的activity都是在最上層,這個時候就不會產生新的activity。
B.假設程式有二個activities A->B,這樣候B開啟A時,則會變成A->B->A,這是因為A不是在最上層,所以就會產生一個新的A。
3.singleTask 意思就是指,同一個Task中只能只一個activity。如果在發現Activity的instance已經存在,則清空這個instance则之上的Activity,使其處於最上層。
我們假設B設成singleTask,
舉個例子來說:
假設有A->B->C->D,當D又用startActivity呼叫B時,則B不會產生一個新的activity,且會將在他上面的C-D清掉,所以stack裡只剩下A,B。
4. singleInstance 這個模式較為複雜,activity要已一個新的task來開啟,而且保證不再有其他Activity instance進入。
舉個例子來說:
actA是standard開啟,actB是singleInstance,
開啟順序為actA1(task1) -> actB(task2) ->actA2(task1),
actB會已一個新的task來開啟(如下圖),
所以當按back鍵時,就變成actA2(task1)->actA1(task1)->actB(task2) 。
總結:
- standard : 每次都會產生一個實例(instance)。
- singleTop : 如果activity在最上層,就不會產生新的實例。
- singleTask :永遠只有一個實例,而且只要被呼叫都會保持在最上層。
- singleInstance :永遠只有一個實例,而且該task只有它一個實例。
補充:
如果自己想做實驗,在onCreate利用下面二種方法拿到activity ID及task ID 。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first); //拿activity ID TextView textView = (TextView) findViewById(R.id.textView); textView.setText(this.toString()); //拿task ID TextView taskIdView = (TextView) findViewById(R.id.taskIdView); taskIdView.setText("current task id: " + this.getTaskId()); }
reference:
http://my2drhapsody.blogspot.tw/2012/08/activity-launchmode.html
http://developer.android.com/guide/components/tasks-and-back-stack.html
http://blog.csdn.net/liuhe688/article/details/6754323
沒有留言:
張貼留言