我們都知道,在android系統中,內存不足的時候,系統是可以殺死任何暫停、停止或者銷毀的Activity。這就意味着基本上沒有在前台的Activity都會面臨被關閉的可能。
Android系統之所以采用這個機制,而不是像ios系統一樣采用墓碑式的管理方式,是因為這樣可以在一定程度上加快應用的響應速度,但是由於以前的android手機的性能比較落后,手機運行內存RAM基本上處於2G以內,所以就會導致一些不在前台的Activity有可能被回收,但是現在的智能手機性能已經足夠強悍,拿我現在的這部手機——一加手機3(6GRAM)來說,但是之前官方表示為了手機的續航,將內存機制進行修改,使得當用戶打開的應用超過一定數量的時候,系統就會對一些Activity進行回收,所以重新打開這些Activity的時候,就會出現重新加載的情況,這在打開大型游戲的時候比較常見。
那我們在開發的時候如何在系統資源吃緊的時候將一些必要的數據進行及時的存儲保護,避免數據的丟失呢?
我們來看官方API中給出的一個關於Activity的生命周期的圖解:
如果Activity在onPause()后被殺掉,那么onStop()和onDestroy()方法就不會被調用,所以如果在onPause()方法內更多的釋放Activity資源,就會讓Activity在后台被系統殺掉的幾率降低。
但是殺死一個Activity並不會導致它從Activity堆棧中移除,相反如果Activity實現並使用了onSaveInstanceState()方法用來自定義的保存數據,那么Activity的狀態就會被保存到Bundle中,這樣當Activity被重新返回的時候,onCreate()方法會被再次調用,這樣剛才保存有數據的Bundle對象就會被調用,將數據重新讀取;但是該方法並不能保證在任何時候都能被調用。因此我們應該在onPause()方法中保存重要的數據到永久存儲(即手機硬件內存中)而用onSaveInstanceState()來保存一些可以從當前屏幕快速恢復的數據(相對不重要的數據)。
BOB
好久沒有更新了,接下來會勤奮些的