APP基本性能优化

布局优化

  • 避免OverDraw过渡绘制
  • 优化布局层级
  • 避免嵌套过多无用布局
  • 当我们在画布局的时候,如果能实现相同的功能,优先考虑相对布局,然后在考虑别的布局,不要用绝对布局。
  • 使用标签把复杂的界面需要抽取出来
  • 使用标签,因为它在优化UI结构时起到很重要的作用。目的是通过删减多余或者额外的层级,从而优化整个Android
    Layout的结构。核心功能就是减少冗余的层次从而达到优化UI的目的! ViewStub
    是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。

代码优化

  • 使用AndroidLint分析结果进行相应优化
  • 不使用枚举及IOC框架,反射性能低
  • 常量加static
  • 静态方法
  • 减少不必要的对象、成员变量
  • 尽量使用线程池
  • 适当使用软引用和弱引用
  • 尽量使用静态内部类,避免潜在的内存泄露
  • 图片缓存,采用内存缓存LRUCache和硬盘缓存DiskLRUCache
  • Bitmap优化,采用适当分辨率大小并及时回收

LISTVIEW和GRIDVIEW优化(老项目可能会用)

  • 采用ViewHolder复用convertView
  • 避免在getView中执行耗时操作
  • 列表在滑动状态时不加载图片
  • 开启硬件加速

移动端获取网络数据优化

  • 连接复用 :节省连接建立时间,如开启 keep-alive。

对于 Android 来说默认情况下 HttpURLConnection 和 HttpClient 都开启了 keep-alive。只是 2.2 之前 HttpURLConnection 存在影响连接池的 Bug,具体可见:Android HttpURLConnection 及 HttpClient 选择

  • 请求合并:即将多个请求合并为一个进行请求,比较常见的就是网页中的 CSS Image
    Sprites。如果某个页面内请求过多,也可以考虑做一定的请求合并。
  • 减少请求数据的大小:对于post请求,body可以做gzip压缩的,header也可以作数据压缩(不过只支持http 2.0)。
  • 返回的数据的body也可以作gzip压缩,body数据体积可以缩小到原来的30%左右。(也可以考虑压缩返回的json数据的key数据的体积,尤其是针对返回数据格式变化不大的情况,支付宝聊天返回的数据用到了)
  • 根据用户的当前的网络质量来判断下载什么质量的图片(电商用的比较多)。

其他优化

  • 使用Application Context代替Activity Context
  • 谨慎使用static 关键字

static使用不当容易造成内存泄漏

  • 数据库优化
  • 电量优化
  • 多线程并发引发的性能等

相关工具

  • 使用Hierarchy Viewer查看UI布局层级
  • 使用AndroidStudio Memory Monitor查看内存使用情况
  • 使用TraceView优化App性能
  • 使用内存泄露分析工具MAT分析APP内存状态
  • 检测内存泄露的开源库:LeakCanary

你可能感兴趣的:(Android基础回顾)