Android實戰技巧之二十六:persistableMode與Activity的持久化,

來源:互聯網
上載者:User

Android實戰技巧之二十六:persistableMode與Activity的持久化,

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)。就差模擬器關機後開啟看效果。我這邊是沒有成功,如果哪位大蝦看到了效果,請告訴我。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.