android开发性能优化经验总结一


明白UI的绘制流程:measure-layout-draw, measure计算 view宽、高 , layout 确认view的位置 draw 绘制
measure与layout都需要for loop所有的子控件,汇集起来才能完成绘制,布局。所以子控件越多,所消耗的时间越长
(inflate,layout_weight,relative,多层嵌套等),减少不必要的子控件或层级,是相当有必要的。
可以通过merge,viewstub这些标签来减少层级嵌套, 可以用HierarchyViewer工具来检查。

对于Listview或者GridView这种多item的组件来说,复用item可以减少inflate次数,通过setTag,getTag的ViewHolder方式实现复用,这里要注意的是,
holder中的控件最好reset后再赋值,避免图片,文字错乱。

对于ViewPager第一次显示时卡顿以及左右滑动卡顿,有以下几种优化方式:

ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。

每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费

图片显示不出来或者加载时间太长,怎么办?分两部分,下载速度,加载速度。

对于下载,要控制好同时下载的最大任务数(平均速度慢),同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)。

对于加载速度,我们要知道一点,虽然下载的图片可能只有几百K,但是decode成bitmap所占用的内存可是成倍的,尽可能的减小图片size是根本因素,
让服务端提供不同分辨率的图片才是最好的解决方案, 加载速度: 内存>硬盘>网络,合理的使用内存缓存也是关键。

缓存使用, 以前通常使用HashMap软引用的方式来实现,但是因为回收机制不可控,并不是那么完美,可以采用lrucache,disklrucache
通过算法来平衡内存与硬盘缓存, lrucache,disklrucache使用起来相对来说还是比较麻烦,也可以找一些好的开源框架来替代如xUtils

网络请求,不推荐自己来写HttpClient访问网络代码,可以使用比较好的开源项目来代替,比如volley、okHttp、xUtils

编码注意代码规范:

for loop中不要声明临时变量,不到万不得已不要在里面写try catch。

明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)
合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+="str"中有几个对象) ,少用枚举enum,少用父类声明(List,Map)

如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。

适当的地方多用单例模式 ,知晓单例模式的好处

多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值