日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android中Activity啟動(dòng)模式詳解

在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的四種啟動(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)用,不管誰激活該Activity都會(huì)進(jìn)入同一個(gè)應(yīng)用中。

standard

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

下面通過實(shí)例來演示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,通過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,不過此時(shí)在這個(gè) Activity中再次點(diǎn)擊按鈕創(chuàng)建對(duì)象時(shí),它會(huì)另外創(chuàng)建新的Activity對(duì)象,這種模式可能大多數(shù)情況下不是我們需要的,因?yàn)閷?duì)系統(tǒng)性能的消耗過 大。

下面我們介紹兩種能使用當(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.             android:name=".SingleTopActivity" 
  2.             android:label="@string/singletop" 
  3.             android:launchMode="singleTop" > 
  4.  

界面初始化:

點(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ì)象,不過它每次回調(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(this, new Date().toString(), 1).show(); 
  7.     } 

我們?yōu)榇朔椒ň帉懘a輸出當(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è)程序中訪問瀏覽器時(shí),如果當(dāng)前瀏覽器沒有打開,則打開瀏覽器,否則會(huì)在當(dāng)前打開的瀏覽器中訪問。此模式會(huì)節(jié)省大量的系統(tǒng)資源,因?yàn)樗鼙WC要請(qǐng)求的Activity對(duì)象在當(dāng)前的棧中只存在一個(gè)。

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


當(dāng)前標(biāo)題:Android中Activity啟動(dòng)模式詳解
網(wǎng)頁地址:http://www.5511xx.com/article/dhjppjs.html