Android onSaveInstanceState、onRestoreInstanceState保存数据
先看例子:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.exercise_clone);if (null != savedInstanceState) {String json = savedInstanceState.getString("homeworkDetail");List<HomeworkDetail> details = JSON.parseArray(json, HomeworkDetail.class);if (details != null) {arrayList.addAll(details);}}initWedget();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);if (arrayList != null) {String json = JSON.toJSONString(arrayList);outState.putString("homeworkDetail", json);}}一般的,當Android activity的生命周期進入onPause后,Android系統緊接著就要回調:
protected void onSaveInstanceState(Bundle outState);因此,通常,Android activity保存現場數據至少其中兩個思路和方法是:
(1)可以在onPause保存現場數據;
(2)也可以在onSaveInstanceState中保存現場數據。
然后到了后面,當activity再次onResume時候恢復出過去發生的現場數據。
(注意!Android保存現場數據的方法和思路很多,上面只是給出其中兩個最基本、最簡單的思路和方法。)
需要注意的一點是,有一種情況,Android系統是不會調用activity的onSaveInstanceState方法:當用戶按了返回鍵(back鍵)退出這個activity時。之所以這么設計,我謹慎估計Android的系統設計思想認為:既然用戶已經選擇完全退出這個activity,那就沒有必要保存現場數據了。
Android的activity既然有onSaveInstanceState(),那么,與之對應的onRestoreInstanceState(),在Android
activity生命周期的什么時候被Android系統回調呢?答案是:和onSaveInstanceState一樣,onRestoreInstanceState并不是Android
activity生命周期中的一部分。兩者只是在Android activity生命周期發生過程中,Android系統參與進來的回調和過程。
如果要恢復activity的現場數據,雖然onRestoreInstanceState的方法名字看上去挺像回事,但實際上onRestoreInstanceState通常并不被開發者用來做“Restore”數據。然而,要明白的是,至少有一種情況發生時候,Android的onRestoreInstanceState將被系統回調:當activity被銷毀(onDestroy)然后又重新加載這個activity時,在onStart之后還沒有onResume時候將調用onRestoreInstanceState。聽上去很奇怪,既然銷毀了,怎么又加載這個activity呢?這種情況的場景在哪兒?比如,當activity在橫豎屏切換時候,這種情況的場景就要發生,Android在橫豎排切換時候,將主動銷毀activity和重新創建一個新的activity出來,在此過程中,onRestoreInstanceState就要被回調。
這樣的描述有些過于抽象,寫實例代碼檢驗一下就清楚了。
我寫一個最簡單的Android activity,這個activity沒有任何內容,只是重寫了Android activity的各個生命周期中的方法,目的是追蹤activity在生命周期中各個方法的回調動作。保存一個系統時間戳(System.currentTimeMillis)作為標記,測試的Activity全部代碼如下:
運行這個Activity,然后旋轉機身從豎直方向變為水平方向,把這個activity從從標準豎屏切換到橫屏,Logcat追蹤打印的結果輸出說明了一切,如圖:
轉自http://blog.csdn.net/zhangphil/article/details/48155371
總結
以上是生活随笔為你收集整理的Android onSaveInstanceState、onRestoreInstanceState保存数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android仿微信聊天语言点击喇叭动画
- 下一篇: Android 顶部滑动切换实现(一)