多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > Android---33---四種加載模式

Android---33---四種加載模式

來源:程序員人生   發(fā)布時間:2015-07-14 14:09:49 閱讀次數(shù):3761次

Android的4種加載模式:

 

首先在配置Activity時便可指定該Activity用哪一種加載模式,通過android:launchMode屬性。

 

4種加載模式:

standard:標(biāo)準(zhǔn)模式,默許

singleTop:Task頂單例模式

singleTask:Task內(nèi)單例模式

singleInstance:全局單例模式

 

Android是通過Task對Activity進(jìn)行管理的,通過getTaskID()方法可以取得當(dāng)前活動的Task的ID。

可以把Task理解成Activity棧,Task以棧的情勢來管理Activity。

 

 

下面是4種模式:

1.standard模式

每次通過這類模式來啟動目標(biāo)Activity時,Android會為目標(biāo)Activity創(chuàng)建1個新的實(shí)例,并將干Activity添加到當(dāng)前Task棧中----這類模式不會啟動新的Task,新Activity將被添加到原本的Task中。


import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(MainActivity.this); layout.setOrientation(1); setContentView(layout); TextView textView = new TextView(MainActivity.this); textView.setText("ACtivity為 :" + this.toString() + " " + ",Task Id為:" + this.getTaskId()); Button button = new Button(this); button.setText("啟動Main"); layout.addView(textView); layout.addView(button); button.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, MainActivity.class); startActivity(intent); } }





屢次點(diǎn)擊按鈕,程序會不斷的啟動當(dāng)前活動,活動的hashCode變化,但是TaskId總是1樣的,這就表明這類加載模式不會啟動新的Task。

當(dāng)按返回鍵的時候,啟動的活動會逐1從棧頂刪除。




2.singleTop

這類模式與標(biāo)準(zhǔn)模式基本相似,但是有1點(diǎn)不同:當(dāng)將要被啟動的目標(biāo)Activity已位于棧頂時,系統(tǒng)不會重新創(chuàng)建目標(biāo)Activity實(shí)例,而是直接復(fù)用已有的Activity實(shí)例。

將上例中的launchmode改成singleTop,不管用戶點(diǎn)擊多少次按鈕,界面上的程序不會有任何變化。

如果說要被啟動的目標(biāo)Activity沒有位于Task棧頂,此時系統(tǒng)會重新創(chuàng)建目標(biāo)Activity實(shí)例,并將它加載到Task的棧頂----此時與標(biāo)準(zhǔn)模式完全相同。



3.singleTask


采取這類加載模式的Activity在同1個Task內(nèi)只有1個實(shí)例,啟用目標(biāo)Activity時,有下面3種情況:

1.如果將要啟動的活動不存在,則創(chuàng)建,放入棧頂

2.如果目標(biāo)Activity已存在于棧頂,則與singleTop1樣

3.如果目標(biāo)Activity已存在,但是否是位于棧頂,系統(tǒng)會將目標(biāo)活動前的活動移出Task棧,使得目標(biāo)Activity位于棧頂

 

演示說明第3種情況:

 

程序中有兩個活動,活動中都有1個TextView和1個Button,TextView用來顯示活動的hashCode和TaskID,Button用來啟動不同的活動。

當(dāng)按下第1個活動中的按鈕時會啟動第2個活動,當(dāng)按下第2個活動中的按鈕的時候會啟動第1個活動。








1表示活動1和它的加載模式

2表示活動2和它的加載模式

這就是運(yùn)行截圖與示意圖。

首先先創(chuàng)建并啟動的是1,再創(chuàng)建啟動2,再創(chuàng)建啟動1,再啟動2,已有2了,不會創(chuàng)建,所以便把2之前的1移出棧,使得2位于棧頂。

如果在接著啟動1的話,這個1會再進(jìn)行創(chuàng)建,已不是原來的活動1了。

應(yīng)當(dāng)可以充分的說明上述第3種情況。



4.singleInstance



再這類加載模式下,系統(tǒng)保證不管從哪一個Task中啟動目標(biāo)活動,只會創(chuàng)建1個目標(biāo)活動實(shí)例,并會使用1個全新的Task棧來裝載該活動實(shí)例

當(dāng)系統(tǒng)采取該模式啟動目標(biāo)活動的時候,有以下兩種情況:

1.如果將要啟動的活動不存在,則先創(chuàng)建1個Task,再創(chuàng)建目標(biāo)活動,加入棧頂

2.如果目標(biāo)活動已存在,不管它在哪一個利用程序中,不管在哪一個Task中,系統(tǒng)會把還Activity所在的Task棧轉(zhuǎn)到前臺,從而使用該Activity顯示出來

采取singleInstance加載模式加載Activity總是位于Task棧頂,由于Task棧中只有1個Activity。

 

將上例中的兩個活動的加載模式都改成singleInstance。





生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 尤物福利在线 | 武则天一级淫片免费放 | 亚洲成a人不卡在线观看 | 大香网伊人久久综合网2020 | 欧美精品成人a多人在线观看 | 最近最新免费中文字幕一 | 夜趣第一宅男福社区国产 | 91精品国产综合久久久久久 | 久久亚洲一级α片 | 亚洲精品视频网 | 国产专区一va亚洲v天堂 | 手机免费在线视频 | 亚洲一级色 | 娇小性色xxxxx | 国产亚洲一区二区三区在线观看 | 人善交xxx | 国产午夜亚洲精品一级在线 | 欧美高清免费精品国产自 | 亚洲国产精品a一区 | 宅男午夜大片啪啪软件 | 精品不卡一区中文字幕 | 亚洲成熟| 玖玖中文字幕 | 极品美女国产精品免费一区 | 国产三级做爰高清视频a | 国产不卡的一区二区三区四区 | 明星三级国产免费播放 | 5月丁香婷婷 | 欧美亚洲国产成人不卡 | 成人做爰毛片免费视频 | 嫩草影院在线观看精品视频 | 欧美v日韩v亚洲v最新 | 欧美韩国 | 欧美stockingssexxxx| 国产一区二区成人 | 真人性做爰aa毛片免费视频观看 | 国产不卡一区二区三区免费视 | 亚洲人成网址在线观看 | 一级欧美在线的视频 | 伊人色婷婷综在合线亚洲 | 亚洲一区在线播放 |