日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 面試中被問到:Android中activity保存狀態和數據到底該在哪個方法中進行

面試中被問到:Android中activity保存狀態和數據到底該在哪個方法中進行

來源:程序員人生   發布時間:2015-04-28 08:42:30 閱讀次數:4969次

        今天接到1個電面,途中面試官問到1個問題,如果1個activity在后臺的時候,由于內存不足可能被殺死,在這之前如果想保存其中的狀態數據,比如說客戶填的1些信息之類的,該在哪一個方法中進行。


        我聽到的第1反應就是說:在onPause方法中進行保存狀態的操作。但是面試官說:onPause()的延續時間很短,假設要進行1些長時間的操作呢?


        然后我就糾結了,由于我知道,如果是由于內存不足而被清算,onDestroy()方法1般是不會被履行的。所以只好實話實說,只知道onDestroy在這類情況下不1定會履行,所以不能在其中做操作。


        事后又去看了1下官方文檔,發現:對activity的燒毀,有下面這么1個表:


        




"Killable"表示當前activity是不是可以被殺死,意思是說當上面標記為Killable的方法返回以后,activity便可能隨時被殺死。從表中不難看出在onPause方法調用完之前,activity都是不能夠被殺死的,而onStop()和onDestroy()都是可以被殺死的。但是圖中又標出了1個黃色的標記:HONEYCOMB。



官方文章原文是這樣說的:Starting with Honeycomb, an application is not in the killable state until itsonStop() has returned. 

從Honeycomb(Android 3.0)開始,利用只有等到onStop()方法返回以后,才可以被殺死,也就是說在履行完onStop()方法之前,利用都不可能被殺死。




you should use the onPause() method to write any persistent data (such as user edits) to storage.

你應當在onPause()方法中去存儲那些持久性的數據,比如用戶的輸入等。




the method onSaveInstanceState(Bundle) is called before placing the activity in such a background state, allowing you to save away any dynamic instance state in your activity into the given Bundle, to be later received in onCreate(Bundle) if the activity needs to be re-created.


onSaveInstanceState(Bundle)將在activity轉入“background state后臺狀態”之前被調用,能讓我們存儲1些activity的動態的狀態值到Bundle對象中,以便在以后調用onCreate(Bundle)方法時用到。




這里提到1個background state后臺狀態”,我們來看看activity的幾種狀態:



  • 前臺狀態

  • 通俗的說就是可以看到,且可以操作(有焦點)的狀態



  • 可視狀態

  • 便可以看得見(沒有被完全遮擋),但是沒有焦點,不可以觸摸操作;比如躲在對話框后面的activity



  • 后臺狀態

  • 已看不到了,系統可以將這個進程殺死來回收內存。如果在這類狀態下activity被系統殺死了,那末在用戶重新打開這個activity的時候,它的onCreate方法會使用之前onSaveInstanceState(Bundle)保存的狀態數據,來讓自己恢復到之前的狀態



  • 空進程狀態

  • 1個沒有持有任何activity和任何利用組件的進程,比如Services或廣播接受者,當內存不足的時候,它們將會被先殺死并回收。



    也就是說onSaveInstanceState(Bundle)會在activity轉入后臺狀態之前被調用,也就是onStop()方法之前,onPause方法以后被調用;我們都知道在默許情況下,在旋屏以后,activity會重新經歷1次生命周期,下面的log就是在點擊旋屏以后的履行順序:





    這樣看起來,那種要保存的數據,應當在onPause下完成,而activity的1些狀態值,比如組件寬高之類的,應當在onSaveInstanceState中保存在Bundle中去。


    但是要注意的是,官方文檔最后又給出了1個正告:



     Note that it is important to save persistent data in onPause() instead of onSaveInstanceState(Bundle) because the latter is not part of the lifecycle callbacks, so will not be called in every situation as described in its documentation.



    由于onSaveInstanceState(Bundle)方法不是activity生命周期中的回調方法之1,所以在activity被殺死的時候,它是不能保證百分百的被履行的。。。。



    看模樣onSaveInstanceState()也靠不住啊,還是在onPause中做吧,面試官也不1定靠譜。


    生命周期圖:

  • 轉載請注明出處:http://blog.csdn.net/cyp331203/article/details/44985087

  • 生活不易,碼農辛苦
    如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
    程序員人生
    ------分隔線----------------------------
    分享到:
    ------分隔線----------------------------
    關閉
    程序員人生
    主站蜘蛛池模板: 国产精品久久亚洲 | 久久久久久国产精品 | 久久久久久久久综合 | 欧美黑人巨大久久久精品一区小蓝 | 国产精品久久久久久久久久久久久久 | 日韩黄色视屏 | 亚洲国产成人精品女人 | 欧美日韩亚洲精品一区二区三区 | 亚洲iv一区二区三区 | 最近中文字幕在线视频 | 日韩一级免费 | 国产精品久久久久久久午夜片 | 久久精品免费观看 | 黄色大片在线 | av在线一区二区三区 | 男女午夜网站 | 久久五月天婷婷 | 午夜国产福利 | 毛片无码国产 | 国产福利一区二区 | 亚洲午夜久久久久久久久久久 | 欧美视频二区 | 久久久亚洲精品视频 | www.a级毛片| 国产女人夜夜春夜夜爽免费 | 88xx永久免费看大片 | 日韩国产精 | 97在线免费观看视频 | 亚洲美女性视频 | 不卡的一区二区 | 精品久久久久亚洲 | 国产激情精品一区二区三区 | 亚洲一区二区三区四区五区午夜 | 久久精品成人一区二区三区蜜臀 | 男人都懂的网站 | 日日干天天干 | 久久99精品国产一区二区三区 | 免费福利av | 亚洲一区综合 | 国产二区在线播放 | 亚洲电影免费 |