【移動應(yīng)用開發(fā)技術(shù)】Android Activity啟動模式回退棧管理_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android Activity啟動模式回退棧管理_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android Activity啟動模式回退棧管理_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】AndroidActivity啟動模式,回退棧管理!

(一):Activity被回收了怎么辦?當(dāng)系統(tǒng)內(nèi)存不足的時候Activity是有可能被回收的,打個比方用戶在AActivity啟動了BActivity那么A就處于停止?fàn)顟B(tài),由于內(nèi)存不足A會被回收,被回收之前Activity中的一些重要數(shù)據(jù)怎么辦呢?此時可以重寫onSaveInstanceState()方法,該方法會攜帶一個Bundle對象,可以巧妙的利用該對象來進行數(shù)據(jù)的保存,同時您也會發(fā)現(xiàn)在onCreate()方法中也會攜帶一個bundle對象,那么此時取出數(shù)據(jù)您就懂啦bundle.getXxx()。@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if(savedInstanceState!=

null

){

savedInstanceState.getInt("xxx");

//

}

}@Override

protected

void

onSaveInstanceState(Bundle

outState)

{

super.onSaveInstanceState(outState,

outPersistentState);

outState.putInt("xxx",

250);

}取出之后,在做相應(yīng)的恢復(fù)就可以了,比如說將數(shù)據(jù)還原到輸入框等。

(二):Activity的啟動模式!

相信您知道如何取啟動一個新的Activity,并指導(dǎo)安卓Activity是由系統(tǒng)管理的,但你知道他的啟動方式嗎?在實際開發(fā)中我們應(yīng)該根據(jù)實際情況去使用四種不同的模式,standard,singleTop,singleTask和singleInstance,可以在AndroidManifest.xml中設(shè)置<Activity/>..標(biāo)簽的Android:lanuchMode屬性,指定啟動的模式。

a:standard模式是系統(tǒng)默認的方式,在不進行顯示啟動的情況下,所有Activity都會使用該方法啟動。相信您已經(jīng)知道了系統(tǒng)是使用回退棧的模式來關(guān)聯(lián)Activity,在當(dāng)前模式下,系統(tǒng)并不會管當(dāng)前Activity實例是否存在,每當(dāng)啟動一個新的Activity就會生成一個Activity的實例,并從回退棧中入棧,且位于棧頂?shù)奈恢?。@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

//打印

Log.d("MainActivity",

this.toString())

setContentView(R.layout.activity_main);

Button

button

=

(Button)findViewById(R.id.button1);

button.setOnClickListener(new

View.OnClickListener()

{

@Override

public

void

onClick(View

v)

{

//啟動

Intent

intent

=

new

Intent(MainActivity.this,

MainActivity.class);

startActivity(intent);

}

});

}讀者可能會奇怪在MainActivity的基礎(chǔ)上啟動MainActivity,從邏輯上并沒什么意義,主要探究standard模式,運行效果:從打印我們可以看出,每點擊一次button1就會出現(xiàn)一個新的MainActivity實例,此時回退棧中就會存在3三個MainActivity實例,因此你需要點三次back鍵才能退出

b:singleTop模式,有時候會疑問當(dāng)你想要的Activity已經(jīng)處于棧頂了為什么還要創(chuàng)建新的實例?那么singleTop可以解決你的問題,singleTop會檢查Activity是否位于棧頂,如果存在則不會創(chuàng)建新的實例。但是,當(dāng)你從MainActivity跳轉(zhuǎn)到BActivity時MainActivity已經(jīng)不處于棧頂,如果從B切換到MainActivity,MainActivity的實例還是會創(chuàng)建的。可以在AndroidManifest.xml中設(shè)置<ActivityAndroid:lanuchMode="singleTop">模式來指定。

c:singleTask模式,singleTask模式是為解決singleTop模式遺留的問題而存在,從b點中可以看出,當(dāng)Activity沒有位于棧頂時啟動Activity依然會創(chuàng)建Activity實例。如果指定啟動模式為singleTask,那么啟動Activity之前系統(tǒng)會檢測回退棧中是否有當(dāng)前Activity實例的存在,如果存在則直接推向棧頂,否則創(chuàng)建實例再推向棧頂,從而可以避免重復(fù)創(chuàng)建實例的問題。

d:singleInstance模式,該模式有別于以上三種,指定為singleInstance模式的Activity系統(tǒng)會創(chuàng)建一個新的回退棧來管理,那這樣做有什么意義呢?例如:假設(shè)我們的Activity有一個是允許其他應(yīng)用程序調(diào)用的,如何我們要使Activity在當(dāng)前應(yīng)用程序中與其他應(yīng)用程序共享,那我們該如何處理呢?a,b,c三種肯定都是做不到的,因為每一個應(yīng)用程序都會有自己的回退棧,同一個Activity在不同的回退棧中必然創(chuàng)建了新的實例。使用singleInstance模式即可解決這個問題,使用這種模式系統(tǒng)會單獨分配一個回退棧來管理,不管是哪個應(yīng)用程序來訪問當(dāng)前Activity都會共用該回退棧中的實例,從而達到共享的目的。如圖:說明:ThirdActivity與FirstActivity位于同一回退棧,SecondActivity單獨位于一回退棧,而將SecondActivity設(shè)置為singleInstance模式。入口從FirstActivity進入SecondActivity,再從SecondActivity進入ThirdActivity,此時棧頂一定是ThirdActivity,當(dāng)按下back鍵ThirdA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論