新聞中心
activity的啟動(dòng)模式有四種,standard、singleTop、singleTask、singleInstance.

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),樂業(yè)企業(yè)網(wǎng)站建設(shè),樂業(yè)品牌網(wǎng)站建設(shè),網(wǎng)站定制,樂業(yè)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,樂業(yè)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1.standard
standard是Activity默認(rèn)的啟動(dòng)模式,在不進(jìn)行顯示指定的情況下,所有活動(dòng)都會(huì)自動(dòng)使用這種啟動(dòng)模式。
每次啟動(dòng)都一個(gè)新的Activity位于棧頂。
Android:launchMode="standard",此時(shí)每次點(diǎn)擊按鈕都會(huì)創(chuàng)建新的Activity
現(xiàn)在,我們寫一個(gè)簡單的按鈕 ,實(shí)現(xiàn)跳轉(zhuǎn)Activity
- private Button button;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Log.e("MainActivity",this.toString());
- button = (Button)findViewById(R.id.button);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent(MainActivity.this, MainActivity.class);
- startActivity(intent);
- }
- });
- }
雖然跳轉(zhuǎn)的頁面相同,但是在Task中每點(diǎn)一次按鈕就會(huì)創(chuàng)建一個(gè)新的Activity
Activity創(chuàng)建日志
啟動(dòng)示例圖
2.singleTop
當(dāng)Activity的啟動(dòng)模式為singleTop時(shí),當(dāng)啟動(dòng)的Activity已經(jīng)處于Activity棧頂時(shí),則直接使用。
android:launchMode="singleTop"
我們創(chuàng)建NextActivity,并且在MainActivity中添加button2
- private Button button1,button2;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Log.e("MainActivity", this.toString());
- button1 = (Button) findViewById(R.id.button1);
- button2 = (Button) findViewById(R.id.button2);
- button1.setOnClickListener(this);
- button2.setOnClickListener(this);
- }
- @Override
- public void onClick(View view) {
- switch (view.getId()){
- case R.id.button1:
- Intent intent = new Intent(MainActivity.this, MainActivity.class);
- startActivity(intent);
- break;
- case R.id.button2:
- Intent intent2 = new Intent(this, NextActivity.class);
- startActivity(intent2);
- break;
- }
- }
此時(shí)在MainActivity中啟動(dòng)MainActivity,則Activity棧中只會(huì)創(chuàng)建一次;但是先啟動(dòng)NextActivity之后再啟動(dòng)MainActivity,則會(huì)創(chuàng)建新的MainActivity,因?yàn)榇藭r(shí)的Activity棧頂是NextActivity
MainActivity ->MainActivity ->MainActivity
MainActivity -> NextActivity -> MainActivity
啟動(dòng)示例圖
3.singleTask
當(dāng)活動(dòng)的啟動(dòng)模式為singleTask時(shí),啟動(dòng)該Activity會(huì)現(xiàn)在棧中檢查是否已存在,若存在則直接將該活動(dòng)之上的Activity全部出棧。
android:launchMode="singleTask"
啟動(dòng)示例圖
4.singleInstance
singleInstance模式下會(huì)有一個(gè)單獨(dú)的返回棧來管理活動(dòng)。不管哪個(gè)應(yīng)用程序來訪問該活動(dòng),都共用同一個(gè)棧,這樣就可以允許其他程序調(diào)用,實(shí)現(xiàn)共享該活動(dòng)。
android:launchMode="singleInstance"
啟動(dòng)示例圖
圖中啟動(dòng)的過程是:Main -> New -> Next 這個(gè)過程很容易看懂
返回過程是:Next -> Main -> New
明顯看出順序不一樣,為什么會(huì)出現(xiàn)這種情況呢?
NextActivity和MainActivity處于同一個(gè)棧,當(dāng)我們返回時(shí),NextActivity出棧,此時(shí)棧A中還存在MainActivity,并且處于棧頂,所以會(huì)看到MainActivity.
當(dāng)MainActivity執(zhí)行返回時(shí),棧A會(huì)清空,然后我們就看到了位于棧B的NewActivity。
之后NewActivity出棧,棧B也為空時(shí),App退出。
Activity的啟動(dòng)模式簡單介紹到這里, 希望對您有所幫助,有不足或者錯(cuò)誤的地方請指正。
后面會(huì)每星期至少一篇跟新本系列,感興趣可以關(guān)注。
一起學(xué)習(xí),一起進(jìn)步。
分享標(biāo)題:Activity啟動(dòng)模式(launchMode)詳解
鏈接URL:http://www.5511xx.com/article/coedhos.html


咨詢
建站咨詢
