




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。Android Activity狀態(tài)保存機(jī)制-voidonCreate(BundlesavedInstanceState)當(dāng)Activity被第首次加載時(shí)執(zhí)行。我們新啟動(dòng)一個(gè)程序的時(shí)候其主窗體的onCreate事件就會(huì)被執(zhí)行。如果Activity被銷毀后(onDestroy后),再重新加載進(jìn)Task時(shí),其onCreate事件也會(huì)被重新執(zhí)行。注意這里的參數(shù)savedInstanceState(Bundle類型是一個(gè)鍵值對集合,大家可以看成是.Net中的Dictionary)是一個(gè)很有用的設(shè)計(jì),由于前面已經(jīng)
2、說到的手機(jī)應(yīng)用的特殊性,一個(gè)Activity很可能被強(qiáng)制交換到后臺(tái)(交換到后臺(tái)就是指該窗體不再對用戶可見,但實(shí)際上又還是存在于某個(gè)Task中的,比如一個(gè)新的Activity壓入了當(dāng)前的Task從而“遮蓋”住了當(dāng)前的Activity,或者用戶按了Home鍵回到桌面,又或者其他重要事件發(fā)生導(dǎo)致新的Activity出現(xiàn)在當(dāng)前Activity之上,比如來電界面),而如果此后用戶在一段時(shí)間內(nèi)沒有重新查看該窗體(Android通過長按Home鍵可以選擇最近運(yùn)行的6個(gè)程序,或者用戶直接再次點(diǎn)擊程序的運(yùn)行圖標(biāo),如果窗體所在的Task和進(jìn)程沒有被系統(tǒng)銷毀,則不用重新加載Process,Task和Task中的Ac
3、tivity,直接重新顯示Task頂部的Activity,這就稱之為重新查看某個(gè)程序的窗體),該窗體連同其所在的Task和Process則可能已經(jīng)被系統(tǒng)自動(dòng)銷毀了,此時(shí)如果再次查看該窗體,則要重新執(zhí)行onCreate事件初始化窗體。而這個(gè)時(shí)候我們可能希望用戶繼續(xù)上次打開該窗體時(shí)的操作狀態(tài)進(jìn)行操作,而不是一切從頭開始。例如用戶在編輯短信時(shí)突然來電,接完電話后用戶又去做了一些其他的事情,比如保存來電號(hào)碼到聯(lián)系人,而沒有立即回到短信編輯界面,導(dǎo)致了短信編輯界面被銷毀,當(dāng)用戶重新進(jìn)入短信程序時(shí)他可能希望繼續(xù)上次的編輯。這種情況我們就可以覆寫Activity的voidonSaveInstanceStat
4、e(BundleoutState)事件,通過向outState中寫入一些我們需要在窗體銷毀前保存的狀態(tài)或信息,這樣在窗體重新執(zhí)行onCreate的時(shí)候,則會(huì)通過savedInstanceState將之前保存的信息傳遞進(jìn)來,此時(shí)我們就可以有選擇的利用這些信息來初始化窗體,而不是一切從頭開始。2.voidonStart()onCreate事件之后執(zhí)行。或者當(dāng)前窗體被交換到后臺(tái)后,在用戶重新查看窗體前已經(jīng)過去了一段時(shí)間,窗體已經(jīng)執(zhí)行了onStop事件,但是窗體和其所在進(jìn)程并沒有被銷毀,用戶再次重新查看窗體時(shí)會(huì)執(zhí)行onRestart事件,之后會(huì)跳過onCreate事件,直接執(zhí)行窗體的onStart事件
5、。3.voidonResume()onStart事件之后執(zhí)行?;蛘弋?dāng)前窗體被交換到后臺(tái)后,在用戶重新查看窗體時(shí),窗體還沒有被銷毀,也沒有執(zhí)行過onStop事件(窗體還繼續(xù)存在于Task中),則會(huì)跳過窗體的onCreate和onStart事件,直接執(zhí)行onResume事件。4.voidonPause()窗體被交換到后臺(tái)時(shí)執(zhí)行。5.voidonStop()onPause事件之后執(zhí)行。如果一段時(shí)間內(nèi)用戶還沒有重新查看該窗體,則該窗體的onStop事件將會(huì)被執(zhí)行;或者用戶直接按了Back鍵,將該窗體從當(dāng)前Task中移除,也會(huì)執(zhí)行該窗體的onStop事件。6.voidonRestart()onStop事
6、件執(zhí)行后,如果窗體和其所在的進(jìn)程沒有被系統(tǒng)銷毀,此時(shí)用戶又重新查看該窗體,則會(huì)執(zhí)行窗體的onRestart事件,onRestart事件后會(huì)跳過窗體的onCreate事件直接執(zhí)行onStart事件。7.voidonDestroy()Activity被銷毀的時(shí)候執(zhí)行。在窗體的onStop事件之后,如果沒有再次查看該窗體,Activity則會(huì)被銷毀。最后用一個(gè)實(shí)際的例子來說明Activity的各個(gè)生命周期。假設(shè)有一個(gè)程序由2個(gè)ActivityA和B組成,A是這個(gè)程序的啟動(dòng)界面。當(dāng)用戶啟動(dòng)程序時(shí),Process和默認(rèn)的Task分別被創(chuàng)建,接著A被壓入到當(dāng)前的Task中,依次執(zhí)行了onCreate,on
7、Start,onResume事件被呈現(xiàn)給了用戶;此時(shí)用戶選擇A中的某個(gè)功能開啟界面B,界面B被壓入當(dāng)前Task遮蓋住了A,A的onPause事件執(zhí)行,B的onCreate,onStart,onResume事件執(zhí)行,呈現(xiàn)了界面B給用戶;用戶在界面B操作完成后,使用Back鍵回到界面A,界面B不再可見,界面B的onPause,onStop,onDestroy執(zhí)行,A的onResume事件被執(zhí)行,呈現(xiàn)界面A給用戶。此時(shí)突然來電,界面A的onPause事件被執(zhí)行,電話接聽界面被呈現(xiàn)給用戶,用戶接聽完電話后,又按了Home鍵回到桌面,打開另一個(gè)程序“聯(lián)系人”,添加了聯(lián)系人信息又做了一些其他的操作,此時(shí)界
8、面A不再可見,其onStop事件被執(zhí)行,但并沒有被銷毀。此后用戶重新從菜單中點(diǎn)擊了我們的程序,由于A和其所在的進(jìn)程和Task并沒有被銷毀,A的onRestart和onStart事件被執(zhí)行,接著A的onResume事件被執(zhí)行,A又被呈現(xiàn)給了用戶。用戶這次使用完后,按Back鍵返回到桌面,A的onPause,onStop被執(zhí)行,隨后A的onDestroy被執(zhí)行,由于當(dāng)前Task中已經(jīng)沒有任何Activity,A所在的Process的重要程度被降到很低,很快A所在的Process被系統(tǒng)結(jié)束。當(dāng)一個(gè)程序有多個(gè)activity時(shí),按back鍵,上一個(gè)activity會(huì)退出,怎么配備布置可以不退出?下次啟
9、動(dòng)它時(shí)他還是運(yùn)行的。另有就是主程序,怎么讓他在按back鍵時(shí)天然后臺(tái)?重寫返回按鈕事件publicvoidonBackPressed()此方法當(dāng)返回按鈕事件出發(fā)時(shí),體系會(huì)默許調(diào)用finish(),你直接return別讓體系調(diào)用就行,back鍵后臺(tái)參考源碼home的事件并重寫OverridepublicvoidonBackPressed()/這里處理邏輯代碼,該方法僅適用于2.0或更新版的sdkreturn;android的手機(jī)的back鍵默認(rèn)行為是finish處于前臺(tái)的Activity的即Activity的狀態(tài)為Destroy狀態(tài),再次啟動(dòng)該Activity是從onCreate開始的。而Hom
10、e鍵默認(rèn)是stop前臺(tái)的Activity即狀態(tài)為onStop而不是Destroy,若再次啟動(dòng)它,則是從OnResume開始的,即會(huì)保持上次Activityd的狀態(tài)。back鍵也有例外的,按back鍵不會(huì)關(guān)閉Activity的,比如播放音樂,按了back鍵之后仍可以繼續(xù)播放音樂,這是Music這支ap已經(jīng)重寫了back鍵的事件處理。為什么需要Home鍵和Back鍵呢?一個(gè)使得Activity為Stop一個(gè)使得為Destroy呢?我想原因的原因在于是android也是一個(gè)多任務(wù)的操作系統(tǒng),通過Home鍵切換不同的任務(wù),而通過back關(guān)閉任務(wù)中的某一個(gè)活動(dòng)。若仔細(xì)想想就覺得PC的多任務(wù)行為一樣的。詳
11、細(xì)的解說可以看官方文檔,也可以看看這文章:/content/09/1201/15/79031_10135626.shtml還有例子注意:點(diǎn)擊Back鍵后,activity會(huì)先去執(zhí)行finish(),然后執(zhí)行onDestroy();在樂phone的手機(jī)上開發(fā)應(yīng)用,它的左上角有一個(gè)“返回”按鈕,如果想在返回后把一些東西銷毀掉,可以重寫finish()方法。HYPERLINK/sirdonker/archive/2010/06/04/5647625.aspx/sirdonker/archive/2010/06/04/5647625.aspxAndroidActivity導(dǎo)航HYPERLINK/xir
12、ihanlin/archive/2009/08/05/1539420.html/xirihanlin/archive/2009/08/05/1539420.htmlAndroid保存Activity狀態(tài)HYPERLINK/cmdn/wiki/index.php?edition-view-6259-1.html/cmdn/wiki/index.php?edition-view-6259-1.html(onsaceInstance)HYPERLINK/blog/static/14601809320109261141571/blog/static/14601809320109261141571/An
13、droid保存Activity狀態(tài)如果你想保存Activity的信息(例如,類實(shí)例的變量)而又不需要和其它的組件共享的話,你可以調(diào)用Activity的getPreferences方法,不用指定一個(gè)Preference的名字。對返回的SharedPreference的訪問只限于調(diào)用的Activity;每個(gè)Activity支持一個(gè)不命名的SharedPreference對象。1、使用Activity的私有SharedPreference:對于保存Activity實(shí)例的變量來說,Android提供了一種替代SharedPreference的特殊方法。通過重寫Activity的onSaveInstan
14、ceState事件處理函數(shù),你可以使用它的Bundle參數(shù)來保存實(shí)例的值。保存數(shù)據(jù)的方法還是使用與在SharedPreference中相同的get和put方法。在完成Bundle的修改后,將其傳入父類的處理函數(shù)中,如下面的代碼片段所示:privatestaticfinalStringTEXTVIEW_STATE_KEY=“TEXTVIEW_STATE_KEY”;OverridepublicvoidonSaveInstanceState(BundleoutState)/RetrievetheViewTextViewmyTextView=(TextView)findViewById(R.id.my
15、TextView);/SaveitsstateoutState.putString(TEXTVIEW_STATE_KEY,myTextView.getText().toString();super.onSaveInstanceState(outState);2、onSaveInstanceState/*保存Activity銷毀前的一些狀態(tài)信息*seeandroid.app.Activity#onSaveInstanceState(android.os.Bundle)*/OverridepublicvoidonSaveInstanceState(BundleoutState)super.onSa
16、veInstanceState(outState);outState.putString(fileName,fileName);這個(gè)處理函數(shù)會(huì)在Activity的Active生命周期結(jié)束時(shí)觸發(fā),但僅在它不是顯式地結(jié)束(即異常結(jié)束)。因此,它一般用于確保在單個(gè)用戶會(huì)話中的Active生命周期間Activity狀態(tài)的一致性。如果一個(gè)會(huì)話期間,應(yīng)用程序被迫重啟,那么,保存的Bundle會(huì)傳入到onRestoreInstanceState和onCreate方法中。下面的片段顯示了如何從Bundle中提取值來更新Activity實(shí)例的狀態(tài):OverridepublicvoidonCreate(Bundleicicle)super.onCreate(icicle);setContentView(R.layout.main);TextViewmyTextView=(Text
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)合同范本林業(yè)
- 傳單派發(fā)合同范本
- 鄉(xiāng)鎮(zhèn)物業(yè)收費(fèi)合同范本
- 勞務(wù)公司租車合同范本
- 公會(huì)主播合同范本
- 勞務(wù)購買合同范例
- 公司經(jīng)營模式合同范本
- 出售買賣合同范本
- 勞動(dòng)合同轉(zhuǎn)簽合同范本
- 2025國合通測校園招聘筆試參考題庫附帶答案詳解
- 悟哪吒精神做英雄少年開學(xué)第一課主題班會(huì)課件-
- 2025年2級(jí)注冊計(jì)量師專業(yè)實(shí)務(wù)真題附答案
- 2025年春季學(xué)期教導(dǎo)處工作計(jì)劃及安排表
- 果實(shí)品質(zhì)評(píng)價(jià)體系建立與應(yīng)用-深度研究
- 2024年江蘇省中小學(xué)生金鑰匙科技競賽(高中組)考試題庫(含答案)
- 智能制造技術(shù)在工業(yè)設(shè)計(jì)中的應(yīng)用
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 吉林省吉林市普通中學(xué)2024-2025學(xué)年高三上學(xué)期二模試題 數(shù)學(xué)
- 2024年江西建設(shè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 北京市東城區(qū)2024-2025學(xué)年高一上學(xué)期期末統(tǒng)一檢測歷史試卷(含答案)
- 2025年昆明市公安局招考文職人員高頻重點(diǎn)提升(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論