Android客户端优化

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

 

 

你可能感兴趣的:(thread,多线程,android,数据库,application,query)