Android 恢復Activity現場

首先說兩個Activity的函數:onSaveInstanceState和onRestoreInstanceState。

經過測試函數onSaveInstanceState並不是像文檔裏說的,是在內存不夠時,系統要強制殺掉這個Activity時,進行調用的。在這幾鍾情況下會被調用:

1.當用戶按下HOME鍵時。 

2.從任務管理器切換其他應用的時候

3.關閉屏幕的時候

4.跳轉到另一個Activity的時候

5.橫豎屏切換的時候

如果執行了finish()方法onSaveInstanceState就不會執行了,比如按返回鍵。

總結onSaveInstanceState調用的條件是當一個Activity變得容易被系統銷燬的時候(肯定還沒有銷燬)會被執行;主動的銷燬Activity此函數不會執行。

onRestoreInstanceState函數在Activity“未經許可”情況下被銷燬而後系統又重新創建此Activity的時候會被調用(是系統重新打開此Activty而非人爲通過Intent打開),比如應用切到後臺很長時間,重新啓動的時候如果沒有被系統kill,那麼會回到被切到後臺時操作的頁面,或者橫豎屏切換等,這時候可以從方法參數的Bundle中或者onCreate的Bundle中獲取到在onSaveInstanceState執行的時候保存的數據,onCreate會先執行;onRestoreInstanceState執行的時候onSaveInstanceState一定執行了,但是onSaveInstanceState每次執行onRestoreInstanceState可不一定都會執行,有點繞~

實際應用中,容易被系統kill的Activity可以考慮用onSaveInstanceState保存數據用onRestoreInstanceState恢復現場,比如某些內容被分享到第三方平臺瞭如微信,這時候有一條精彩內容吸引了用戶停留在wechat,看完以後返回我們的app,這時候有分享入口的Activity已經被系統銷燬,就可以通過上面方法做恢復;更具app實際情況可以爲“容易”被銷燬的Activity加上以上的方法。

當Activity”未經允許“情況下被系統銷燬,然後系統又重新打開此Activity的時候,Activity最初創建的時候Intent(getIntent()獲取)中的數據還能獲取到,也就是說onSaveInstanceState保存的是一些特殊的中間生成的數據。

有不恰當的地方,歡迎各位朋友指正,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章