資源描述:
《安卓activity的兩個(gè)神秘方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、本文介紹Android中關(guān)于Activity的兩個(gè)神秘方法:onSaveInstanceState()和onRestoreInstanceState(),并且在介紹這兩個(gè)方法之后,再分別來實(shí)現(xiàn)使用InstanceState保存和恢復(fù)數(shù)據(jù)功能、Android實(shí)現(xiàn)屏幕旋轉(zhuǎn)異步下載效果這樣兩個(gè)示例?! ∈紫葋斫榻BonSaveInstanceState()和onRestoreInstanceState()?。關(guān)于這兩個(gè)方法,一些朋友可能在Android開發(fā)過程中很少用到,但在有時(shí)候掌握其用法會(huì)幫我們起到比較好的效果。尤其是在應(yīng)用程序在不知道的情況下退出后
2、,如何實(shí)現(xiàn)其數(shù)據(jù)保存的功能。先來讓我們看下這兩個(gè)方法的有什么樣的作用。 1.?基本作用:? Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它們不同于onCreate()、onPause()等生命周期方法,它們并不一定會(huì)被觸發(fā)。當(dāng)應(yīng)用遇到意外情況(如:內(nèi)存不足、用戶直接按Home鍵)由系統(tǒng)銷毀一個(gè)Activity時(shí),onSaveInstanceState()會(huì)被調(diào)用。但是當(dāng)用戶主動(dòng)去銷毀一個(gè)Activity時(shí),例如在應(yīng)用中按返回鍵,onSaveInstanceS
3、tate()就不會(huì)被調(diào)用。因?yàn)樵谶@種情況下,用戶的行為決定了不需要保存Activity的狀態(tài)。通常onSaveInstanceState()只適合用于保存一些臨時(shí)性的狀態(tài),而onPause()適合用于數(shù)據(jù)的持久化保存?! ≡赼ctivity被殺掉之前調(diào)用保存每個(gè)實(shí)例的狀態(tài),以保證該狀態(tài)可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle)(傳入的Bundle參數(shù)是由onSaveInstanceState封裝好的)中恢復(fù)。這個(gè)方法在一個(gè)activity被殺死前調(diào)用,當(dāng)該activity在將來某個(gè)時(shí)刻回
4、來時(shí)可以恢復(fù)其先前狀態(tài)。?? 例如,如果activityB啟用后位于activityA的前端,在某個(gè)時(shí)刻activityA因?yàn)橄到y(tǒng)回收資源的問題要被殺掉,A通過onSaveInstanceState將有機(jī)會(huì)保存其用戶界面狀態(tài),使得將來用戶返回到activityA時(shí)能通過onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢復(fù)界面的狀態(tài)。? 關(guān)于onSaveInstanceState(),是在函數(shù)里面保存一些View有用的數(shù)據(jù)到一個(gè)Parcelable對(duì)象并返回。在Activity的onSaveIns
5、tanceState(BundleoutState)中調(diào)用View的onSaveInstanceState(),返回Parcelable對(duì)象, 接著用Bundle的putParcelable方法保存在Bundle?savedInstanceState中。? 當(dāng)系統(tǒng)調(diào)用Activity的的onRestoreInstanceState(BundlesavedInstanceState)時(shí),?同過Bundle的getParcelable方法得到Parcelable對(duì)象,然后把該P(yáng)arcelable對(duì)象傳給View的onRestoreInstance
6、State(Parcelablestate)。在的View的onRestoreInstanceState中從Parcelable讀取保存的數(shù)據(jù)以便View使用。? 這就是onSaveInstanceState()和?onRestoreInstanceState()兩個(gè)函數(shù)的基本作用和用法。? 2.?onSaveInstanceState()什么時(shí)候調(diào)用? 先看ApplicationFundamentals上的一段話: AndroidcallsonSaveInstanceState()beforetheactivitybecomesvuln
7、erabletobeingdestroyedbythesystem,butdoesnotbothercallingitwhentheinstanceisactuallybeingdestroyedbyauseraction(suchaspressingtheBACKkey).? 從這句話可以知道,當(dāng)某個(gè)activity變得"容易"被系統(tǒng)銷毀時(shí),該activity的onSaveInstanceState()就會(huì)被執(zhí)行,除非該activity是被用戶主動(dòng)銷毀的,例如當(dāng)用戶按BACK鍵的時(shí)候。? 注意上面的雙引號(hào),何為"容易"?意思就是說該acti
8、vity還沒有被銷毀,而僅僅是一種可能性。這種可能性有哪些?通過重寫一個(gè)activity的所有生命周期的onXXX方法,包括onSave