江帆
摘 要:在Android系統(tǒng)中,Activity(即活動(dòng))是應(yīng)用程序的重要組成單元之一。Activity與Service,BroadcastReceiver和ContentProvider并稱為Android系統(tǒng)的四大組件。在實(shí)際的Android應(yīng)用程序中,一個(gè)Android軟件往往包含多個(gè)Activity,每個(gè)Activity呈現(xiàn)不同的操作界面,因此,掌握Android系統(tǒng)中各界面之間的活動(dòng)模式是非常必要的。該文詳細(xì)闡述了Android系統(tǒng)中Activity的四種加載模式。
關(guān)鍵詞:Activity 加載 模式 棧
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2017)03(b)-0031-02
在編寫(xiě)Android應(yīng)用程序的過(guò)程中,配置Activity時(shí)需要指定lauchMode屬性,這個(gè)屬性就是用于配置該Activity的加載模式。該屬性支持4個(gè)屬性值[1],標(biāo)準(zhǔn)模式、棧頂單例模式、任務(wù)內(nèi)部單例模式和單實(shí)例加載模式。
在Android系統(tǒng)中,使用任務(wù)棧來(lái)管理多個(gè)Activity,當(dāng)系統(tǒng)啟動(dòng)一個(gè)新的應(yīng)用程序時(shí),Android系統(tǒng)就會(huì)為之創(chuàng)建一個(gè)任務(wù)棧[2],先啟動(dòng)的Activity放在棧的底部,后啟動(dòng)的Activity放在棧的頂部,然后加載這個(gè)應(yīng)用的入口Activity,這個(gè)入口Activity就是我們首先看到的應(yīng)用程序界面。因此,Activity不同的加載模式,就負(fù)責(zé)控制Activity與任務(wù)棧之間的加載關(guān)系,并管理實(shí)例化、加載Activity的方式。下面,詳細(xì)介紹這4種加載模式。
1 Activity的四種加載模式
1.1 standard模式
standard模式是Android系統(tǒng)內(nèi)置的標(biāo)準(zhǔn)模式,當(dāng)Android系統(tǒng)使用這種模式啟動(dòng)目標(biāo)Activity時(shí),會(huì)為此Activity創(chuàng)建一個(gè)新的實(shí)例,并將此Activity添加到當(dāng)前的任務(wù)棧中。使用standard模式加載Activity不會(huì)創(chuàng)建新的任務(wù)棧[3],新創(chuàng)建的Activity將被添加到棧頂位置。
1.2 singleTop模式
singleTop模式是棧頂單例模式,此模式與standard模式基本相似,但是有一點(diǎn)不同:當(dāng)要啟動(dòng)的目標(biāo)Activity已經(jīng)位于任務(wù)棧的頂部時(shí),系統(tǒng)不同重新創(chuàng)建新的目標(biāo)Activity實(shí)例,而是重復(fù)使用已經(jīng)存在的Activity實(shí)例,這就意味著,如果在編寫(xiě)程序的過(guò)程中,將Activity的加載模式改為singleTop,無(wú)論用戶單擊多少次創(chuàng)建按鈕,程序界面都不會(huì)發(fā)生變化。
1.3 singleTask模式
singleTask模式是任務(wù)內(nèi)部單例模式,采用這種加載模式的Activity在同一個(gè)任務(wù)棧內(nèi)部只有一個(gè)實(shí)例。
1.4 singleInstance模式
singleInstance模式是單實(shí)例加載模式,在這種加載模式下,Android系統(tǒng)無(wú)論從哪個(gè)任務(wù)棧中啟動(dòng)目標(biāo)Activity,只會(huì)創(chuàng)建一個(gè)目標(biāo)Activity實(shí)例,并會(huì)使用一個(gè)全新的任務(wù)棧來(lái)加載此Activity實(shí)例。
2 編寫(xiě)Android程序?qū)崿F(xiàn)四種加載模式
2.1 standard模式程序代碼
public class MainActivity extends Activity
{ intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent); }
2.2 singleTop模式程序代碼
⑴配置Activity,設(shè)置為singleTop模式。
在AndroidManifest.xml文件中,修改launchMode屬性為singleTop,代碼如下:
android:launchMode=”singleTop” /> ⑵編寫(xiě)java代碼。 public class MainActivity extends Activity { Intent intent = new Intent(MainActivity.this, MainActivity.class); startActivity(intent); } 2.3 singleTask模式程序代碼 ⑴配置Activity,設(shè)置為singleTask模式。 在AndroidManifest.xml文件中,修改launchMode屬性為singleTask,代碼如下: android:launchMode=”singleTask” /> ⑵編寫(xiě)java代碼。 public class SingleTaskActivity extends Activity { Intent intent = new Intent(SingleTaskActivity.this, SecondActivity.class); startActivity(intent); } 2.4 singleInstance模式程序代碼 ⑴配置Activity,設(shè)置為singleInstance模式。 在AndroidManifest.xml文件中,修改launchMode屬性為singleInstance,代碼如下:
android:launchMode=”singleInstance” /> ⑵編寫(xiě)java代碼。 public class SingleInstanceActivity extends Activity { Intent intent = new Intent(SingleInstanceActivity.this, SecondActivity.class); startActivity(intent); } 3 結(jié)語(yǔ) 在Android系統(tǒng)中,Activity的四種加載模式各有其特點(diǎn)。standard模式無(wú)須指定其啟動(dòng)方式。singleTop為單實(shí)例模式,使用時(shí)須配置其Activity的launchMode屬性為singleTop。singleTask為系統(tǒng)內(nèi)部單實(shí)例模式,使用時(shí)須配置其Activity的launchMode屬性為singleTask。singleInstance為單實(shí)例加載模式,使用時(shí)須配置其Activity的launchMode屬性為singleInstance。Activity的四種加載模式,分別適用于不同的程序編寫(xiě)環(huán)境。在編寫(xiě)Android應(yīng)用程序時(shí),要仔細(xì)分析其特點(diǎn),有針對(duì)性地采用不同的加載模式,才能發(fā)揮最好的效果。 參考文獻(xiàn) [1] 蔡敏.Android平臺(tái)上的藍(lán)牙遠(yuǎn)程控制研究[J].工程技術(shù):文摘版,2015,9(3):80-81. [2] 方育紅.基于購(gòu)物商城應(yīng)用的Android框架[J].移動(dòng)信息,2015,9(1):34. [3] 王曉禹,石麗.基于JSON實(shí)現(xiàn)Android智能終端與Web服務(wù)器“面向?qū)ο蟆钡男畔⒔粨Q[J].數(shù)字技術(shù)與應(yīng)用,2012(4):224-225. [4] 郭文麗,嚴(yán)潮斌,吳旭.基于Android客戶端的圖書(shū)館微服務(wù)研究與實(shí)踐[J].圖書(shū)情報(bào)工作,2013(8):22-26. [5] 馬建紅,姬莉霞,衛(wèi)權(quán)崗.基于Android平臺(tái)的移動(dòng)個(gè)人助手設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012(2):24-26.