自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Activity啟動(dòng)模式(launchMode)詳解

移動(dòng)開發(fā) Android
Activity的啟動(dòng)模式有四種,standard、singleTop、singleTask、singleInstance.

Activity的啟動(dòng)模式有四種,standard、singleTop、singleTask、singleInstance.

 

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

  1. private Button button; 
  2.     @Override 
  3.     protected void onCreate(Bundle savedInstanceState) { 
  4.         super.onCreate(savedInstanceState); 
  5.         setContentView(R.layout.activity_main); 
  6.         Log.e("MainActivity",this.toString()); 
  7.         button = (Button)findViewById(R.id.button); 
  8.         button.setOnClickListener(new View.OnClickListener() { 
  9.             @Override 
  10.             public void onClick(View view) { 
  11.                 Intent intent = new Intent(MainActivity.this, MainActivity.class); 
  12.                 startActivity(intent); 
  13.             } 
  14.         }); 
  15.     }  

雖然跳轉(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

  1. private Button button1,button2; 
  2.  
  3.     @Override 
  4.     protected void onCreate(Bundle savedInstanceState) { 
  5.         super.onCreate(savedInstanceState); 
  6.         setContentView(R.layout.activity_main); 
  7.         Log.e("MainActivity", this.toString()); 
  8.         button1 = (Button) findViewById(R.id.button1); 
  9.         button2 = (Button) findViewById(R.id.button2); 
  10.         button1.setOnClickListener(this); 
  11.         button2.setOnClickListener(this); 
  12.  
  13.     } 
  14.  
  15.     @Override 
  16.     public void onClick(View view) { 
  17.         switch (view.getId()){ 
  18.             case R.id.button1: 
  19.                 Intent intent = new Intent(MainActivity.this, MainActivity.class); 
  20.                 startActivity(intent); 
  21.                 break; 
  22.             case R.id.button2: 
  23.                 Intent intent2 = new Intent(this, NextActivity.class); 
  24.                 startActivity(intent2); 
  25.                 break; 
  26.         } 
  27.     }  

此時(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)步。 

責(zé)任編輯:龐桂玉 來源: Android開發(fā)中文站
相關(guān)推薦

2014-05-27 15:36:01

AndroidActivity啟動(dòng)模式

2016-03-24 14:02:05

ActivityAndroid啟動(dòng)

2021-08-11 17:15:17

AndroidActivity場景

2023-12-09 08:58:30

AndroidActivity啟動(dòng)模式

2021-06-29 08:54:23

設(shè)計(jì)模式代理模式遠(yuǎn)程代理

2011-06-01 17:35:35

Android Activity

2011-06-28 15:01:01

Qt PIMPL

2012-02-21 23:05:17

Windows啟動(dòng)順序

2021-07-07 10:31:19

對象池模式解釋器模式設(shè)計(jì)模式

2021-11-28 22:33:01

Go選項(xiàng)模式

2009-08-18 11:03:31

Observer設(shè)計(jì)模

2010-07-15 17:58:31

Perl模式

2010-06-13 15:58:20

GRUB啟動(dòng)命令

2010-06-09 13:52:55

OpenSUSE桌面

2024-12-16 08:10:00

Spring開發(fā)

2021-08-23 06:27:46

AndroidctivitysetContentV

2010-01-21 09:08:53

.NET設(shè)計(jì)模式

2010-02-03 13:26:54

Linux SVN

2011-09-05 17:35:18

MTK啟動(dòng)過程RTOS

2009-07-08 17:25:05

Java Single
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號