Activity的四種launchMode
launchMode在多個Activity跳轉(zhuǎn)的過程中扮演著重要的角色,它可以決定是否生成新的Activity實例,是否重用已存在的Activity實例,是否和其他Activity實例公用一個task里。這里簡單介紹一下task的概念,task是一個具有棧結(jié)構(gòu)的對象,一個task可以管理多個Activity,啟動一個應(yīng)用,也就創(chuàng)建一個與之對應(yīng)的task。
Activity一共有以下四種launchMode:
1.standard
2.singleTop
3.singleTask
4.singleInstance
在AndroidManifest.xml配置<activity>的Android:launchMode屬性為以上四種之一即可
一.standard
默認(rèn)啟動模式。每當(dāng)啟動一個新的活動,他就會在返回棧中入棧,并處于棧頂?shù)奈恢?。對于使用該模式的活動,系統(tǒng)不會在乎這個活動是否已經(jīng)在返回棧中存在,每次啟動都會創(chuàng)建該活動的一個新的實例。

二.singleTop
在啟動活動時如果發(fā)現(xiàn)返回棧的棧頂已經(jīng)是該活動,則認(rèn)為可以直接使用它,不會再創(chuàng)建新的活動實例。如果已經(jīng)存在,但不是棧頂,則創(chuàng)建


三.singleTask
每次啟動活動時會系統(tǒng)首先檢查返回棧中是否已經(jīng)存在該活動的實例,如果發(fā)現(xiàn)已經(jīng)存在則直接使用該實例,并把該實例之上的所有活動統(tǒng)統(tǒng)出棧;如果沒有發(fā)現(xiàn)就會創(chuàng)建一個新的實例。

四.singleInstance
指定為singleInstance模式的活動會啟用一個新的返回棧來管理這個活動。(使用場景例如:實現(xiàn)其他程序可以共享某個活動的實例,有一個單獨的返回棧來管理活動,多個應(yīng)用程序都可以訪問這個活動,其他三個啟動模式都無法實現(xiàn))

活動拓展:
常規(guī)的數(shù)據(jù)傳遞
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("param1","111111111111111");
intent.putExtra("param2","222222222222222");
startActivity(intent);
在真正的項目開發(fā)中經(jīng)常會有對接的問題出現(xiàn)。比如SecondActivity并不是由自己開發(fā)的,但要啟動它,而且不清楚傳遞的數(shù)據(jù)。以下方法可以輕松解決問題
SecondActivity.class
public class SecondActivity extends AppCompatActivity {
.......
public static void actionStart(Context context, String data1, String data2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("param1", data1);
intent.putExtra("param2", data2);
context.startActivity(intent);
}
......
}
MainActivity.class
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SecondActivity.actionStart(MainActivity.this,"111111111111111","2222222222222222222");
}
});