本系列博文 基因而前微信高級工程師張紹文專欄 《Android開發高手課》的讀書筆記。java
文章所寫內容是本人讀完的感悟,須要原文的朋友請自行購買。git
分區簡單來講就是將設備中的存儲劃分爲一些互不重疊的部分,每一個部分均可以單獨格式化,用做不一樣的目的。github
數據存儲就是把特定的數據結構轉化成能夠被記錄和還原的格式,這個數據格式能夠是二進制的,也能夠是 XML、JSON、Protocol Buffer 這些格式。數據庫
在選擇數據存儲的時候須要考慮的要素緩存
SharedPreferences安全
使用場景微信
用於存儲一些很是簡單,輕量的數據。數據結構
優勢架構
缺點併發
基於以上緣由,各大公司都會有對應的一個替代的存儲方案,好比微信的MMKV
ContentProvider
使用場景
跨進程,跨應用程序之間的大數據量交互,整體來講ContentProvider的總體框架仍是不錯的,目前市面上好像也沒有什麼自研的架構替代。
須要注意的點
ContentProvider 的生命週期默認在 Application onCreate() 以前,並且都是在主線程建立的。咱們自定義的 ContentProvider 類的構造函數、靜態代碼塊、onCreate 函數都儘可能不要作耗時的操做,會拖慢啓動速度。
Serializable
java原生的序列化機制,其自己是經過 ObjectInputStream 和 ObjectOutputStream 來實現的,因爲在序列化過程當中使用了大量的反射和臨時變量使得性能降低,文件體積變大。
須要注意的點
Parcelable
主要解決Serializable性能低下的問題。
使用Parcelable比Serializable須要多添加一些自定義代碼,正是由於這些代碼,使得Parcelable在序列化的時候不須要採用大量反射這種耗時的行爲,從而提升性能。
須要注意的點
使用Parcelable進行永久存儲的話,會存在一些問題。
通常來講,若是須要持久化存儲的話,通常仍是不得不選擇性能更差的 Serializable 方案。
Serial
Twitter開源的Serial保留了Serializable和Parcelable的大部分優勢
Serial 性能看起來還不錯,可是對象的序列化要記錄的信息仍是比較多,在操做比較頻繁的時候,對應用的影響仍是很多的,這個時候咱們能夠選擇使用數據的序列化。
JSON
優勢
市面上可用的框架有Android自帶的JSON庫,Google的Gson,阿里的FastJson,美團的MSON
總的來講Gson的兼容性最好,數據量極大時,FastJson的性能最佳。
Protocol Buffers
二進制序列化方案,數據量龐大的時候性能優於JSON,
推薦使用自帶的SQLite,Realm或者Google的LevelDB。
這部份內容在張老師文中提到的可能是線程併發,索引優化,page和緩存處理等。比較深,這裏就不提了。