1切换界面卡。
2滑动列表卡。
3用户触发事件卡。
针对1.3,你只要把握以下几点:
1.异步加载(画在主thread中,准备数据在工作thread中)
2.分线程做事
3.避免遍历或者使用耗时很长的api(尽量用效率高的api替代)
4.缓存机制
耗时操作列举:
IO/SQL(不稳定时间开销)
ListFile(消耗大量时间)
Inflate View(跟View的复杂度成正比)
创建复杂对象(跟对象复杂度成正比)
全局刷新(Adapter.notifyDataSetChange)
Bitmap decode
Net操作
老生常谈:
IO Write开销远大于Read,Read效率远低于内存访问
大量的并发IO会占满CPU
不好的习惯:
onCreate里从文件做数据还原
onCreate里面做FileList动作
BindView里面创建Bitmap..等等
好的习惯
Main线程里必然不做Write
要Write则必须开独立线程
减少Read次数统一读取一次
需要文件检测时直接按文件名查询,不用FileList
传闻:用了数据库,所以很慢
问题1:Query是否真的耗时?
大量事实证明10-30ms能完事
问题2:Query可能引起的性能问题是?
Query之后往往伴随着ChangeCursor,引发BindView
事实:大量IO会让CPU和系统非常繁忙
问题:好的更新数据库习惯?
拒绝在Main线程插(删)
拒绝多线程插(删)
开启“事务”做批量插(删)
滑动卡顿:
优化方案
1.拆分大的xml为小xml,减少inflate的时间
重载newiew(), getItemViewType()
2.自己一套刷新机制,不用系统的触发adpter的刷新。全刷(不刷新,延时刷,实时刷)+块刷机制组合
3.布局文件尽量使用默认占位
4.图片缓存机制(但不能无限缓存,比如最大15个?)
5.ViewHolder
6.减少或者不做decodeImage 和 createBitmap
7.减少遍历操作
8.减少布局文件的层次结构(这个是最重要的!!!!)
ANR:Application Not Responding
Log: /data/anr/traces.txt