本系列博文 基因而前微信高级工程师张绍文专栏 《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和缓存处理等。比较深,这里就不提了。