APP性能优化基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ericpengjun/article/details/52035700

APP性能优化总结

之前工作中有了解过关于app性能优化的技术,之前也有遇到过一些比较明显的问题,比如UI界面的过度绘制,列表滑动有明显卡顿,比较耗内存等等,但以往都是有问题就解决它,没有针对性的去做相应的优化。有位同行大哥说过一句话:“功能做到,性能做好”,所以借着保证产品质量的出发点,我在这里总结下自己平常了解到关于性能优化的方法,可能不太成熟,不过可以逐步完善。

这里我大概从以下几个方面分析吧:

数据解析

我们的app一般离不开数据,实际开发中服务器端返回的数据格式无非就两种(服务端返回数据的速度也很重要)

  • JSON
  • XML

从解析难度和速度来看,大家都比较倾向于JSON,目前也是最主流的数据格式。在Android开发中可以使用优秀的解析库来加快我们的解析速度,XML有Jsoup,JSON有Jackson、Gson,我们可以通过这些库来帮助我们更快的完成数据解析,提高我们客户端的数据显示效率和客户体验效果。

布局优化

  • 减少布局层级
  • 避免过多无用嵌套
  • 使用include标签重用layout
  • 使用延迟加载
  • 使用Hierarchy View进行层级分析,优化层级

代码优化

  • 对常量使用static修饰符
  • 使用静态方法,将类、变量、方法等等的可见性修改为最小
  • 减少不必要的成员变量
  • 尽量减少创建的新的对象
  • 使用StringBuffer拼接字符串
  • 不要在循环中声明临时变量,不要在循环中捕获异常。用ArrayList,手写计数循环要快3倍
int count = array.size();
for (int i = 0; i < count; i++){
    System.out.println(i);
}

对于线程安全没有要求,尽量使用不安全的集合对象。
- 文件读取操作流时,及时关闭输出输入流。
- 程序频繁创建线程,考虑使用线程池。
- 适当使用软引和弱引用
- 尽量使用静态内部类,避免潜在的内存泄露
- 图片缓存,采用内存缓存LRUCache和硬盘缓存DiskLRUCache
- Bitmap优化,采用适当分辨率大小并及时回收
- 除像音乐播放器等执行后台任务,尽量使用IntentService解决,避免Service内存泄漏
- 避免使用依赖注入框架
- 当界面不可见时释放内存
- 使用Android API优化过的数据集合工具类,如,SparseArray、SparseBooleanArray、以及LongSparseArray等,使用这些API可以让我们的程序更加高效。

    //性能较低的集合
    HashMap<Integer,String> map = new HashMap<>();
    map.put(1,"张三");
    map.put(2,"李四");
    map.put(3,"王五");

    //性能更高的集合
    SparseArray<String> array = new SparseArray<>();
    map.put(1,"张三");
    map.put(2,"李四");
    map.put(3,"王五");
  • 使用proGuard混淆代码,ProGuard会对我我们的代码进行检索,删除一些无用的代码,并且类、字段、方法等进行重命名,重命名的类、字段、方法都会比原来的简短很多,这样对我们的内存占用也变得更少了。

ListView和DridView优化

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

性能优化相关工具

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

Android中引起内存泄露的原因

  • 注册没取消造成内存泄露,如:广播
  • 静态变量持有Activity的引用
  • 单例模式持有Activity的引用
  • 查询数据库后没有关闭游标cursor
  • 构造Adapter时,没有使用 convertView 重用
  • Bitmap对象不在使用时调用recycle()释放内存
  • 对象被生命周期长的对象引用,如activity被静态集合引用导致activity不能释放
  • 使用Handler造成的内存泄露

以上就是我对app性能优化的一些总结,有不成熟的地方,欢迎指正。

猜你喜欢

转载自blog.csdn.net/Ericpengjun/article/details/52035700