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

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

移動(dòng)開(kāi)發(fā) Android
在Android中每個(gè)界面都是一個(gè)Activity,切換界面操作其實(shí)是多個(gè)不同Activity之間的實(shí)例化操作。在Android中Activity的啟動(dòng)模式?jīng)Q定了Activity的啟動(dòng)運(yùn)行方式。

在Android中每個(gè)界面都是一個(gè)Activity,切換界面操作其實(shí)是多個(gè)不同Activity之間的實(shí)例化操作。在Android中Activity的啟動(dòng)模式?jīng)Q定了Activity的啟動(dòng)運(yùn)行方式。

Android總Activity的啟動(dòng)模式分為四種:

Activity啟動(dòng)模式設(shè)置:

  1. <activity android:name=".MainActivity" android:launchMode="standard" />  

Activity的四種啟動(dòng)模式:

1. standard

模式啟動(dòng)模式,每次激活A(yù)ctivity時(shí)都會(huì)創(chuàng)建Activity,并放入任務(wù)棧中。

2. singleTop

如果在任務(wù)的棧頂正好存在該Activity的實(shí)例, 就重用該實(shí)例,否者就會(huì)創(chuàng)建新的實(shí)例并放入棧頂(即使棧中已經(jīng)存在該Activity實(shí)例,只要不在棧頂,都會(huì)創(chuàng)建實(shí)例)。

3. singleTask

如果在棧中已經(jīng)有該Activity的實(shí)例,就重用該實(shí)例(會(huì)調(diào)用實(shí)例的onNewIntent())。重用時(shí),會(huì)讓該實(shí)例回到棧頂,因此在它上面的實(shí)例將會(huì)被移除棧。如果棧中不存在該實(shí)例,將會(huì)創(chuàng)建新的實(shí)例放入棧中。

4. singleInstance

在一個(gè)新棧中創(chuàng)建該Activity實(shí)例,并讓多個(gè)應(yīng)用共享改棧中的該Activity實(shí)例。一旦改模式的Activity的實(shí)例存在于某個(gè)棧中,任何應(yīng)用再激活改Activity時(shí)都會(huì)重用該棧中的實(shí)例,其效果相當(dāng)于多個(gè)應(yīng)用程序共享一個(gè)應(yīng)用,不管誰(shuí)激活該Activity都會(huì)進(jìn)入同一個(gè)應(yīng)用中。

standard

其中standard是系統(tǒng)默認(rèn)的啟動(dòng)模式。

下面通過(guò)實(shí)例來(lái)演示standard的運(yùn)行機(jī)制:

  1. private TextView text_show; 
  2.      private Button btn_mode; 
  3.      @Override 
  4.      public void onCreate(Bundle savedInstanceState) { 
  5.          super.onCreate(savedInstanceState); 
  6.          setContentView(R.layout.activity_main); 
  7.           
  8.          text_show = (TextView) this.findViewById(R.id.text_show); 
  9.           
  10.          text_show.setText(this.toString()); 
  11.           
  12.          btn_mode = (Button) this.findViewById(R.id.btn_mode); 
  13.           
  14.      } 
  15.       
  16.     //按鈕單擊事件 
  17.      public void LaunchStandard(View v){ 
  18.          startActivity(new Intent(this,MainActivity.class)); 
  19.           
  20.          text_show.setText(this.toString()); 
  21.      } 

初始化界面如下:

當(dāng)點(diǎn)擊按鈕時(shí),會(huì)創(chuàng)建新的Activity,通過(guò)TextView@后16進(jìn)制數(shù)的顯示即可看出,點(diǎn)擊兩次分別界面如下:

此時(shí),我們分析棧內(nèi)部的運(yùn)行機(jī)制:(依次從棧頂向上)

因此,這種Standard模式是每次都會(huì)創(chuàng)建新的Activity對(duì)象,當(dāng)點(diǎn)擊返回按鈕時(shí),他會(huì)將棧頂(當(dāng)前Activity)消滅,然后跳 到下一層,例如如果現(xiàn)在Activity是44ed8c50,那么當(dāng)我們點(diǎn)擊返回時(shí)Activity會(huì)變?yōu)?4f28a48,不過(guò)此時(shí)在這個(gè) Activity中再次點(diǎn)擊按鈕創(chuàng)建對(duì)象時(shí),它會(huì)另外創(chuàng)建新的Activity對(duì)象,這種模式可能大多數(shù)情況下不是我們需要的,因?yàn)閷?duì)系統(tǒng)性能的消耗過(guò) 大。

下面我們介紹兩種能使用當(dāng)前棧中Activity的啟動(dòng)模式:

singleTop

從上面的解釋中即可知道,在每次使用新的Activity時(shí)會(huì)自動(dòng)檢測(cè)棧頂?shù)漠?dāng)前Activity是否是需要引用的Activity,如果是則直接引用此Activity,而不會(huì)創(chuàng)建新的Activity。

我們?cè)趧偛诺慕缑嬷屑尤胍粋€(gè)"啟動(dòng)singletop模式"按鈕,當(dāng)點(diǎn)擊時(shí)出現(xiàn)我們創(chuàng)建的singletop中,在Activity singletop中有一個(gè)按鈕,啟動(dòng)singletop模式,表示啟動(dòng)當(dāng)前Activity,由于我們?cè)谇鍐挝募信渲肁ctivity的啟動(dòng)模式為 singleTop,因此此時(shí)不會(huì)再創(chuàng)建而是利用當(dāng)前棧頂?shù)膕ingleTop Activity:

  1. <activity 
  2.             android:name=".SingleTopActivity" 
  3.             android:label="@string/singletop" 
  4.             android:launchMode="singleTop" > 
  5. </activity> 

界面初始化:

點(diǎn)擊"啟動(dòng)singleTop模式"按鈕:

    

我們分析它的運(yùn)行機(jī)制,可知,當(dāng)程序運(yùn)行到此時(shí),棧中的數(shù)據(jù)形式為:

當(dāng)我們?cè)谏厦娼缑嬷悬c(diǎn)擊"啟動(dòng)singleTop模式"按鈕時(shí),由于此Activity設(shè)置的啟動(dòng)模式為singleTop,因此它首先會(huì) 檢測(cè)當(dāng)前棧頂是否為我們要請(qǐng)求的Activity對(duì)象,經(jīng)驗(yàn)證成立,因此它不會(huì)創(chuàng)建新的Activity,而是引用當(dāng)前棧頂?shù)腁ctivity。

雖然它不會(huì)創(chuàng)建新的Activity對(duì)象,不過(guò)它每次回調(diào)用onNewIntent()方法:

  1. @Override 
  2.      protected void onNewIntent(Intent intent) { 
  3.         // TODO Auto-generated method stub 
  4.         super.onNewIntent(intent); 
  5.          
  6.         Toast.makeText(thisnew Date().toString(), 1).show(); 
  7.     } 

我們?yōu)榇朔椒ň帉?xiě)代碼輸出當(dāng)前日期,則在每次點(diǎn)擊上面按鈕時(shí)會(huì)輸出當(dāng)前日期。

singleTask

此啟動(dòng)模式和singleTop在名字上即可看出區(qū)別,即singleTop每次只檢測(cè)當(dāng)前棧頂?shù)腁ctivity是否是我們需要請(qǐng)求創(chuàng)建的,而 singleTask則會(huì)檢測(cè)棧中全部的Activity對(duì)象,從上向下,如果檢測(cè)到是我們所請(qǐng)求的則會(huì)消滅此Activity對(duì)象上面的對(duì)象,直接把檢 測(cè)到的我們需要的Activity置為棧頂。

我們創(chuàng)建一個(gè)SingleTaskActivity,此界面中包含一個(gè)啟動(dòng)MainActivity和啟動(dòng)SingleTaskActivity按鈕。

初始化:

點(diǎn)擊"啟動(dòng)singleTask模式"按鈕:

在此界面中點(diǎn)擊第二個(gè)按鈕"啟動(dòng)singleTask模式"按鈕,根據(jù)定義會(huì)檢測(cè)當(dāng)前棧中是否有此Activity對(duì)象,因此顯示的還是當(dāng)前的Activity,不會(huì)重新創(chuàng)建;

再點(diǎn)擊"啟動(dòng)Standard模式"按鈕,由于MainActivity的啟動(dòng)模式為standard,所以在此會(huì)重新創(chuàng)建一個(gè)MainActivity對(duì)象:

此時(shí)棧中數(shù)據(jù)格式為:

當(dāng)在上面界面中點(diǎn)擊"啟動(dòng)singleTask模式"按鈕時(shí),由于檢測(cè)到當(dāng)期棧中第二個(gè)為我們要?jiǎng)?chuàng)建的Activity,會(huì)將最上面的MainActivity消滅,然后將SingleTaskActivity設(shè)置為棧頂:

SingleInstance

此啟動(dòng)模式和我們使用的瀏覽器工作原理類似,我們都知道在多個(gè)程序中訪問(wèn)瀏覽器時(shí),如果當(dāng)前瀏覽器沒(méi)有打開(kāi),則打開(kāi)瀏覽器,否則會(huì)在當(dāng)前打開(kāi)的瀏覽器中訪問(wèn)。此模式會(huì)節(jié)省大量的系統(tǒng)資源,因?yàn)樗鼙WC要請(qǐng)求的Activity對(duì)象在當(dāng)前的棧中只存在一個(gè)。

上面即為Android中的四種啟動(dòng)模式,我們?cè)陂_(kāi)發(fā)Android項(xiàng)目時(shí)會(huì)經(jīng)常使用到,巧妙設(shè)置Activity的啟動(dòng)模式會(huì)節(jié)省系統(tǒng)開(kāi)銷和程序運(yùn)行效率。

責(zé)任編輯:閆佳明 來(lái)源: cnblogs
相關(guān)推薦

2017-08-03 10:25:26

AndroidActivity

2023-12-09 08:58:30

AndroidActivity啟動(dòng)模式

2021-08-11 17:15:17

AndroidActivity場(chǎng)景

2016-03-24 14:02:05

ActivityAndroid啟動(dòng)

2011-06-01 17:35:35

Android Activity

2011-05-26 15:22:57

Android Activity

2021-08-23 06:27:46

AndroidctivitysetContentV

2010-01-21 09:08:53

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

2010-01-28 13:43:48

Android啟動(dòng)Ja

2010-02-06 10:04:10

Android啟動(dòng)模式

2023-07-03 07:39:43

Spring框架設(shè)計(jì)模式

2011-06-28 15:18:45

Qt 單例模式

2013-01-08 13:33:07

Android開(kāi)發(fā)Activity入門(mén)指南

2010-07-13 09:08:27

Widget開(kāi)發(fā)

2022-06-14 15:45:52

UbuntuLinux

2015-10-20 15:54:16

android源碼滑動(dòng)關(guān)閉

2012-02-17 17:07:30

Android安全Activity劫持

2023-09-22 11:58:49

2019-01-03 09:45:02

Ubuntu救援模式

2010-02-06 10:14:36

Android Act
點(diǎn)贊
收藏

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