《Android开发艺术探索》读书笔记 (15) Android性能优化

前言

  • 笔者在新公司,前两个月做的最多的就是改BUG,熟悉项目,性能优化,其中也经历了不少坑。昨日翻书才发现,其实原来书里面都已经为你总结好了。
  • 不过在有了一番性能优化经验后,对于书上所描述的问题领悟便更深刻了一点。其实一般性能优化在笔者遇到的情况看来,无外乎就是解决ANR(也包含由于OOM导致的ANR)和OOM的问题,这其实就是因为一些书写代码质量问题,比如说:嵌套布局过于复杂,bitmap使用的时候注意做好回收,自定义View的时候,切勿在ondraw,onlayout,onMeasure做一些动画初始化以及耗时操作,还有线程同步的问题等等。这里就不依次列举了。

正文

  • 概述:性能优化–布局优化,绘制优化,内存泄露优化,响应速度优化,ListView优化,Bitmap优化,线程优化等。
  • 布局优化:(1)减少布局文件的层级。(2)避免选择性能较低的ViewGroup,例如RelativeLayout,取而代之,使用LinaerLayout\FrameLayout。(3)使用<\includ>标签或者<\merge>标签解决布局复用的问题,以及使用ViewStub进行懒加载
  • 绘制优化:(1)自定义View,onDraw的方法要避免执行大量的操作。例如:1.因为onDraw会执行多次,因此不要创建新的局部对象,原因是一瞬间产生大量的临时对象,会占用过多的内存并且导致系统更加频繁的GC。2.不要做耗时的任务。
  • 内存泄露优化: 书上推荐使用MAT来找出潜在的内存泄露,MAT确实是一个不错的工具,但对于新手上手不容易,没有一定的使用经验很难快速找到潜在的泄露点。这里为大家推荐一个leakcanary库,Square公司开源的,会自动帮你找出潜在的泄漏点,你唯一要做的就是在测试APP上不停的点点点,或者有针对性的重复测试。有兴趣的童鞋可以搜搜,简单2-3行配置代码就搞定了,很方便。但如果你不满足,执着于MAT,我建议你看下这本书的最后这个章节,其实作者抛砖引玉写的非常好了。
    • 对于笔者的经验,内存泄露,无外乎是回收某个对象的时候,被其他对象给持有了,也就是hold by了,这个大家看anr 的 trace文件的时候,可以通过快速搜索关键字hold by 找到被持有的对象,从而解决anr.对于OOM更是如此,大家使用MAT的时候,直接去dominator_tree查看多次重复的对象,未能被回收的。那就是你要优化的对象了。
  • **ListView和Bitmap优化:**listview现在用的比较少了,一般都是用recyclerview比较多,不过都是同理的,避免在getview里面做耗时操纵。bitmap则注意,加载大图片时候的图片压缩处理,以及bitmap使用完后的回收,bitmap.recycle,和bitmap = null。
  • 线程优化:对于新手来说,很喜欢使用new Thread,这里建议避免在程序中出现大量的new Thread,因为我们可以使用线程池来使Thread复用,避免增加开销,创建过多无用的Thread抢占系统资源。
    • 这里笔者在做性能优化的时候,也遇到过一个问题,就是一些耗时请求我们也可以用异步asynctask来做,但这个有个缺点是不建议多用,因为asynctask没办法进行线程调度和管理,因为笔者的项目是用volley来进行http请求的,为了避免volley内存泄露,可以在请求的queue里把要回收的activity以及他持有的请求reques给cancel掉,这个asynctask就有这个缺点了

总结

  • 最后,作者最后还介绍了一个建议,使用一些Android特有的数据结构,比如SparseArray和Pair等,这里笔者因为没使用过,最近也在研究数据结构,这里就不给建议了,以后使用到了在补上。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值