android 性能调优

一、性能调优主要有四个方面:

  1. 响应时间(Response Time)

  2. 界面卡顿(ANR)

  3. 内存消耗(Memory)

  4. 内存泄露(Out of memory)

二、优化

 资源文件的优化

     1.布局优化

  •  避免overdraw

  •  优化布局层级,尽量使用扁平化结构

  • 避免过多无用嵌套

  • 使用标签 重用layout

  • 使用viewStub延时加载

  • 使用Hierarchy View进行层级分析

     2.图片资源的优化

  • 尽量对背景图片进行压缩,使用不带alpha通道的图片格式

  • 不需要用到的图片资源及时清理掉

 Java 代码的优化

  • 网络请求的优化,可以使用现有的比较好的网络请求框架(retrofit、volley等)。

  • bitmap 优化: bitmap尺寸进行压缩;设置图片缓存;及时回收不再使用的bitmap。

  • 在Activity#onPause()或Activity#onStop()回调中,关闭当前activity正在执行的的动画。

  • 代码规范性优化,算法的优化,数据结构的优化,数据库优化等。

  • 不要通过Intent在Android基础组件之间传递大数据(binder transaction缓存为1MB),可能导致OOM。

  • 新建线程时,必须通过线程池提供(AsyncTask或者ThreadPoolExecutor或者其他形式自定义的线程池),不允许在应用中自行显式创建线程。

  • 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明: Executors返回的线程池对象的弊端如下: 1) FixedThreadPool和SingleThreadPool:允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM; 2)CachedThreadPool 和 ScheduledThreadPool:允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的线程,从而导致OOM。

  •  数据库Cursor必须确保使用完后关闭,以免内存泄漏。 

  • 多线程操作写入数据库时,需要使用事务,以免出现同步问题。 

  • 大数据写入数据库时,请使用事务或其他能够提高I/O效率的机制,保证执行速度。 

  • 执行SQL语句时,应使用SQLiteDatabase#insert()、update()、delete(),不要使用SQLiteDatabase#execSQL(),以免SQL注入风险。 

  • 如果ContentProvider 管理的数据存储在 SQL 数据库中,应该避免将不受信任的外部数据直接拼接在原始SQL语句中。

三、优化工具

  • ddms 

  • Android profiler

  • lint

  • leakCanary

     

你可能感兴趣的:(android)