當(dāng)某個(gè)activity變得“容易”被系統(tǒng)銷(xiāo)毀時(shí),該activity的onSaveInstanceState就會(huì)被執(zhí)行,除非該activity是被用戶(hù)主動(dòng)銷(xiāo)毀的,例如當(dāng)用戶(hù)按BACK鍵的時(shí)候。
注意上面的雙引號(hào),何為“容易”?言下之意就是該activity還沒(méi)有被銷(xiāo)毀,而僅僅是一種可能性。這種可能性有哪些?通過(guò)重寫(xiě)一個(gè)activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我們可以清楚地知道當(dāng)某個(gè)activity(假定為activity A)顯示在當(dāng)前task的最上層時(shí),其onSaveInstanceState方法會(huì)在什么時(shí)候被執(zhí)行,有這么幾種情況:
1、當(dāng)用戶(hù)按下HOME鍵時(shí)。
這是顯而易見(jiàn)的,系統(tǒng)不知道你按下HOME后要運(yùn)行多少其他的程序,自然也不知道activity A是否會(huì)被銷(xiāo)毀,故系統(tǒng)會(huì)調(diào)用onSaveInstanceState,讓用戶(hù)有機(jī)會(huì)保存某些非永久性的數(shù)據(jù)。以下幾種情況的分析都遵循該原則
2、長(zhǎng)按HOME鍵,選擇運(yùn)行其他的程序時(shí)。
3、按下電源按鍵(關(guān)閉屏幕顯示)時(shí)。
4、從activity A中啟動(dòng)一個(gè)新的activity時(shí)。
5、屏幕方向切換時(shí),例如從豎屏切換到橫屏?xí)r。
在屏幕切換之前,系統(tǒng)會(huì)銷(xiāo)毀activity A,在屏幕切換之后系統(tǒng)又會(huì)自動(dòng)地創(chuàng)建activity A,所以onSaveInstanceState一定會(huì)被執(zhí)行。
總而言之,onSaveInstanceState的調(diào)用遵循一個(gè)重要原則,即當(dāng)系統(tǒng)“未經(jīng)你許可”時(shí)銷(xiāo)毀了你的activity,則onSaveInstanceState會(huì)被系統(tǒng)調(diào)用,這是系統(tǒng)的責(zé)任,因?yàn)樗仨氁峁┮粋€(gè)機(jī)會(huì)讓你保存你的數(shù)據(jù)(當(dāng)然你不保存那就隨便你了)。
至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對(duì)的被調(diào)用的,onRestoreInstanceState被調(diào)用的前提是,activity A“確實(shí)”被系統(tǒng)銷(xiāo)毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會(huì)被調(diào)用,例如,當(dāng)正在顯示activity A的時(shí)候,用戶(hù)按下HOME鍵回到主界面,然后用戶(hù)緊接著又返回到activity A,這種情況下activity A一般不會(huì)因?yàn)閮?nèi)存的原因被系統(tǒng)銷(xiāo)毀,故activity A的onRestoreInstanceState方法不會(huì)被執(zhí)行。
另外,onRestoreInstanceState的bundle參數(shù)也會(huì)傳遞到onCreate方法中,你也可以選擇在onCreate方法中做數(shù)據(jù)還原。
轉(zhuǎn)載:http://gundumw100.iteye.com/blog/1115080
只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
|
||
相關(guān)文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
26 | 27 | 28 | 29 | 30 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | 15 | 16 | |||
17 | 18 | 19 | 20 | 21 | 22 | 23 | |||
24 | 25 | 26 | 27 | 28 | 29 | 30 | |||
31 | 1 | 2 | 3 | 4 | 5 | 6 |
常用鏈接
留言簿(2)
隨筆分類(lèi)
- Android(49)
- Androidpn(2)
- hibernate(1)
- Https(1)
- JavaCard(3)
- jQuery(6)
- netty
- NFC(1)
- react框架(1)
- spring(2)
- SpringBoot(1)
- Tomcat+Eclipse(18)
- WebService(2)
- 一些心得(1)
隨筆檔案
- 2020年4月 (4)
- 2015年7月 (5)
- 2015年6月 (6)
- 2015年5月 (4)
- 2015年4月 (3)
- 2015年3月 (1)
- 2015年2月 (1)
- 2015年1月 (4)
- 2014年12月 (1)
- 2014年11月 (2)
- 2014年10月 (2)
- 2014年9月 (2)
- 2014年5月 (5)
- 2014年3月 (3)
- 2014年2月 (2)
- 2014年1月 (8)
- 2013年12月 (2)
- 2013年7月 (2)
- 2013年6月 (4)
- 2013年5月 (16)
- 2012年7月 (1)
- 2012年3月 (2)
- 2011年7月 (6)
文章分類(lèi)
文章檔案
相冊(cè)
收藏夾
Java
搜索
最新隨筆
最新評(píng)論

- 1.?re: Android JSON的簡(jiǎn)單例子
- 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
- --JSON.COM
- 2.?re: androidpn(本文服務(wù)器為tomcat)
- 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
- --Deepak Singh