Android 开发艺术探索 第十五章 Android性能优化

第十五章 Android性能优化

  • 分为以下三部分
  1. 各类性能优化
  2. 内存泄漏
  3. 规范

性能优化

  • 性能优化方面有:
  1. 布局优化
    主要是减少层级
    1.删除无用的控件和层级,有选择的使用性能较低的ViewGroup.如果布局中既能使用LinearLayout (或FrameLayout) 又能使用RelativeLayout(较为复杂), 那么就采用LinearLayout. 如果是通过嵌套方式才能实现效果, 建议采用RelativeLayout.
    2.使用标签
    <include>标签:可以添加其他布局, 主要用于布局重用
    <merge>标签:一般与<include>标签嵌套使用, 减少布局层级
    <ViewStub>标签:提供按需加载的功能.
  2. 绘制优化
    是指view的onDraw方法要避免大量的操作
    1.不要创建新的局部对象
    因为onDraw方法可能会被大量频繁的调用, 从而产生大量的临时对象
    2.onDraw中不要做耗时任务, 也不能执行大量的循环操作
  3. 内存泄漏优化
    写代码时注意, 并且可以使用内存泄漏分析工具
    1.静态变量导致的内存泄漏
    静态变量持有Activity对象. 导致Activity无法释放.
    2.单例模式导致的内存泄漏
    单例模式的特点是其生命周期和Application保持一致, 因此可能会造成Activity对象无法被及时释放.
    3.属性动画导致的内存泄漏
    属性动画中有一类无限循环动画, 如果在activity中播放此类动画而又没有在onDestory中去停止动画, 那么最终会导致activity无法释放.
  4. 响应速度优化和ANR日志分析
    响应速度优化的核心就是避免在主线程中做耗时操作. 由于Android规定: Activity如果5秒之内, BroadcastReceiver在10秒之内, 前者还未响应或后者还未执行完操作, 就会出现ANR.
    1.发生ANR时, 系统会自动在/data/anr目录下创建一个文件traces.txt. 通过分析这个文件就能定位出ANR的原因. 主要看tid = 1的那段, 代表主线程的情况
  5. Bitmap优化
    1.通过BitmapFactory.Options来根据需要对图片进行采样
    2.可以直接使用优秀的框架, 如facebook的fresco.
  6. 线程优化
    使用线程池,避免程序中存在大量的Thread,
    1.线程池可以重用内部的线程, 避免线程创建和销毁带来的性能开销
    2.能有效控制线程池的最大并发数
  7. 一些性能优化建议
    1.避免创建过多的对象
    2.不要使用过多的枚举, 枚举占据的空间比整形要大
    3.常量使用static final来修饰
    4.使用一些Android 持有的数据结构, 比如SparseArray和Pair等,
    5.适当使用软引用和弱引用
    6.尽量使用静态内部类. 避免潜在由于内部类导致的内存泄漏.

内存泄漏分析工具(MAT)

  • 根据实际的项目来进行分析(P502)

代码的可维护性和可扩展性

  • 相关方面
  1. 命名规范
  2. 代码排版
  3. 仅为关键代码添加注释
  4. 代码的层次性和单一职责
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值