API 21為Activity增加了一個新的屬性,只要將其設置成persistAcrossReboots,activity就有了持久化的能力,另外需要配合一個新的bundle才行,那就是PersistableBundle。?
這里的持久化與傳統意義的不同,它的具體實現在Activity重載的onSaveInstanceState、onRestoreInstanceState和onCreate方法。
~~~
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
~~~
onSaveInstanceState和onRestoreInstanceState方法是一對拯救災難的方法,它們不在“正常“的Activity生命周期中,只有一些突發異常情況才會觸發它們,比如橫豎屏切換、按Home鍵等。當API 21后增加了PersistableBundle參數,令這些方法有了系統關機重啟后數據恢復的能力。
網友們評價不一,但是無論如何這都為我們提供了一種便利。而它應用的場景是異常的狀況,不會影響我們正常的數據持久化辦法。比如在pause方法中做一些操作Preferences,文件I/O,SQLite數據庫,ContentProvider等常規辦法。
如何實踐呢??
只需在Manifest中的activity設置屬性:
~~~
android:persistableMode="persistAcrossReboots"
~~~
然后在activity中直接用上述的三個方法即可。?
另外注意API版本是21及以上。
驗證是個難題。因為我沒有5.0及以上系統的設備,求助與模擬器吧,各種問題都來了。無論是Genymotion還是自帶的模擬器,在關機的過程中模擬器都會卡死。雖然我在log里看到了程序已經走過了onSaveInstanceState(Bundle,PersistableBundle)。就差模擬器關機后開啟看效果。我這邊是沒有成功,如果哪位大蝦看到了效果,請告訴我。
- 前言
- 一:文本與布局
- 二:組合控件
- 三:性能測試類
- 四:語音識別
- 五:讀取Excel
- 六:PreferenceActivity使用詳解
- 七:按鈕控制ViewPager的左右翻頁
- 八:Ubuntu下切換JDK版本
- 九:最新Android開發環境(Eclipse+ADT+Android 5.0)
- 十:獲得屏幕物理尺寸、密度及分辨率
- 十一:Android Studio和Gradle
- 十二:Android Studio導入第三方類庫、jar包和so庫
- 十三:APK簽名
- 十四:混淆與反編譯
- 十五:多分辨率適配常用目錄
- 十六:getprop與dumpsys命令
- 十七:Linux下的模擬器硬件加速
- 十八:adb取出安裝在手機中的apk
- 十九:android studio導出jar包(Module)并獲得手機信息
- 二十:兩個開源的圖表/報表控件
- 二十一:Android原型設計工具探索
- 二十二:Android 5.1 SDK下載與配置
- 二十三:Android Studio的NDK開發
- 二十四:橫豎屏切換
- 二十五:模擬器如何重啟?試試Genymotion!
- 二十六:persistableMode與Activity的持久化
- 二十七:Maven編譯開源二維碼掃描項目zxing