Android开发Android技术知识Android开发

张绍文android开发高手课读书笔记5-数据存储篇

2019-02-21  本文已影响12人  niknowzcd

本系列博文 基于是前微信高级工程师张绍文专栏 《Android开发高手课》的读书笔记。

文章所写内容是本人读完的感悟,需要原文的朋友请自行购买。

存储优化篇

Android分区

分区简单来说就是将设备中的存储划分为一些互不重叠的部分,每个部分都可以单独格式化,用作不同的目的。

数据存储需要考虑哪些要素

数据存储就是把特定的数据结构转化成可以被记录和还原的格式,这个数据格式可以是二进制的,也可以是 XML、JSON、Protocol Buffer 这些格式。

在选择数据存储的时候需要考虑的要素

image

数据存储的选项

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的大部分优点

[图片上传失败...(image-b41fc9-1550743598127)]

数据的序列化

Serial 性能看起来还不错,但是对象的序列化要记录的信息还是比较多,在操作比较频繁的时候,对应用的影响还是不少的,这个时候我们可以选择使用数据的序列化。

JSON

优点

市面上可用的框架有Android自带的JSON库,Google的Gson,阿里的FastJson,美团的MSON

总的来说Gson的兼容性最好,数据量极大时,FastJson的性能最佳。

Protocol Buffers

二进制序列化方案,数据量庞大的时候性能优于JSON,

数据库优化

推荐使用自带的SQLite,Realm或者Google的LevelDB。

这部分内容在张老师文中提到的多是线程并发,索引优化,page和缓存处理等。比较深,这里就不提了。

上一篇下一篇

猜你喜欢

热点阅读