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