Android移动性能实战
知识点1
3+1+1
磁盘,cpu,内存
网络
电池(耗电)
知识点2
SP每次commit()会对应一次文件的打开和关闭
优化:同一个方法中,在最后一次保存中调用commit即可
使用apply代替commit,前者是异步操作,后者是同步操作
知识点3
Objectoutputstream序列化磁盘时,会把内存中的每个对象保存在磁盘,在保存对象时候,每个数据成员会带来一次I/O操作。
解决方案:使用byteArrayOutputStream包装它,先将对象序列化后的信息写到缓存区中,然后再一次性地写到磁盘上。见照片
知识点4
解压缩文件
如果zip文件已保存在磁盘中,且解压zip中所有文件,建议使用zipfile
仅解压ZIP中间的某些文件,使用zipfile
如果ZIP没有在磁盘上或者顺序解压一小部分文件,又或ZIP文件目录遭破坏,使用zipinputstream,见照片
知识点5
对于刚刚创建的数据表,数据为空,不要做无所谓的查询,浪费时间
对于覆盖安装,表已经存在,使用insert或者replace
知识点6
调用getwriteabledata获取数据库缓存,避免重复打开数据库
知识点7
Autoincrement字段不要轻易使用,会使数据库的增删改查耗时增加不止一倍两倍
因为需要一个sqlite_sequence表维护行号增加I/O开销,且,删除过的行不会再被利用
知识点8
序列化和反序列化
场景:持久化保存数据
对象在网络中传递
对象在IPC间传递
序列化:serializable与parcelable
前者会产生大量的临时变量,消耗内存,从而引起频繁的GC
后者不能用于将数据存储到磁盘上的情况。适用于IPC
gson实现json的序列化tojson,反序列化fromjson
如果没有特殊需求,为了避免序列化带来的性能问题,可以考虑使用sp或者sqlite存储数据。