<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
主要是介紹Preference Library
的資料恢復機制(比如介面銷燬重建)淺析。
Prefernece
基礎類別給我們提供了兩個方法:
onSaveInstanceState()
:介面銷燬之前提供儲存資料的時機;
onRestoreInstanceState()
:介面銷燬之後提供恢復資料的時機;
這兩個方法名和Activity
提供的銷燬重建的相關方法名都是相同的,所以其作用也都是相同的,這裡我們以EditTextPreference
類作為入口分析下。
protected Parcelable onSaveInstanceState() { final Parcelable superState = super.onSaveInstanceState(); if (isPersistent()) { return superState; } final SavedState myState = new SavedState(superState); myState.mText = getText(); return myState; }
首先isPersistent()
這個方法是用來判斷該設定項資料是否儲存到預設的SharedPreference
中,如果儲存,那我們就不需要通過onSaveInstanceState()
儲存資料了。
比如資料儲存到了SP中,當介面銷燬重建時,會重新從SP中讀取資料渲染到介面上。
接下來看下isPersistent()
返回false的情況:
會構造一個SavedState
物件,這個物件的父類別就是一個Parcelable
物件,只不過幫助我們封裝了讀寫getText()
對應的內容:
protected void onRestoreInstanceState(@Nullable Parcelable state) { if (state == null || !state.getClass().equals(SavedState.class)) { super.onRestoreInstanceState(state); return; } SavedState myState = (SavedState) state; super.onRestoreInstanceState(myState.getSuperState()); setText(myState.mText); }
首先判斷是否為我們上面儲存的SavedState
型別的Parcelable
物件,如果是,則直接進行強制轉換,並從物件中獲取到銷燬前的mText
設定項的文字資料。
這裡我們就以onSaveInstanceState()
儲存重建前資料的方法,進行分析如何接收到分發通知進行呼叫的。
EditTextPreference
的方法重寫的方法onSaveInstanceState()
最終是在Preference
的方法dispatchSaveInstanceState
進行呼叫:
繼續往下走:
public void saveHierarchyState ( @NonNull Bundle container) { dispatchSaveInstanceState( container); }
最終我們查詢到方法saveHierarchyState()
被PreferenceFragmentCompat
這個類進行呼叫,這個類其實就是一個Fragment
物件:
@Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); final PreferenceScreen preferenceScreen = getPreferenceScreen(); if (preferenceScreen != null) { Bundle container = new Bundle(); preferenceScreen.saveHierarchyState(container); outState.putBundle(PREFERENCES_TAG, container); } }
我們的資料會被儲存到container
這個Bundle物件中,然後再將這個Bundle
儲存到Fragment
的用於儲存銷燬重建資料的Bundle
物件中。
到了這裡我們就明白了,是由Fragment
的onSaveInstanceState()
方法分發了介面銷燬重建前儲存資料的通知,最終呼叫到了Preference
的onSaveInstanceState()
方法。
同理,onRestoreInstanceState()
的分發通知也是如此,這裡就不再過多進行分析了。
本篇文章主要是分析了Preference Library
的介面銷燬重建,資料恢復的機制,就是利用了Fragment
的儲存資料和恢復資料的時機進行分發通知Preference
設定項執行相關的邏輯,希望本篇文章能對你有所幫助。
以上就是設定介面開發利器Preference Library資料重建機制詳解的詳細內容,更多關於Preference Library資料重建的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45