一、布局优化:

  1. 尽量减少布局文件的层级。层级少了,绘制的工作量也就少了,性能自然提高。
  2. 布局重用 <include标签>
  3. 按需加载:使用ViewStub,它继承自View,一种轻量级控件,本身不参与任何的布局和绘制过程。他的layout参数里添加一个替换的布局文件,当它通过setVisibility或者inflate方法加载后,它就会被内部布局替换掉。

二、绘制优化:

基于onDraw会被调用多次,该方法内要避免两类操作:

  1. 创建新的局部对象,导致大量垃圾对象的产生,从而导致频繁的gc,降低程序的执行效率。
  2. 不要做耗时操作,抢CPU时间片,造成绘制很卡不流畅。

三、内存泄漏优化:

  1. 静态变量导致内存泄漏,比较明显。
  2. 单例模式导致的内存泄漏 单例无法被垃圾回收,它持有的任何对象的引用都会导致该对象不会被gc。
  3. 属性动画导致内存泄漏
    无限循环动画,在activity中播放,但是onDestroy时没有停止的话,动画会一直播放下去,view被动画持有,activity又被view持有,导致activity无法被回收。

四、响应速度优化:

  1. 避免在主线程做耗时操作 包括四大组件,因为四大组件都是运行在主线程的。
  2. 把一些创建大量对象等的初始化工作放在页面回到前台之后,而不应该放到创建的时候。

五、ListView的优化:

  1. 在adapter中的getView方法中尽量少使用逻辑
  2. 尽最大可能避免GC
  3. 滑动的时候不加载图片
  4. 将ListView的scrollingCache和animateCache设置为false
  5. item的布局层级越少越好
  6. 使用ViewHolder

六、Bitmap优化:

  1. 减少内存开支:图片过大,超过控件需要的大小的情况下,不要直接加载原图,而是对图片进行尺寸压缩,方式是BitmapFactroy.Options采样,inSampleSize 转成需要的尺寸的图片。
  2. 减少流量开销:对图片进行质量压缩,再上传服务器。图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能实现对file的影响,你可以把一个file转成bitmap再转成file,或者直接将一个bitmap转成file时,这个最终的file是被压缩过的,但是中间的bitmap并没有被压缩。
    bitmap.compress(Bitmap.CompressFormat.PNG,100,bos);

七、线程优化:

使用线程池。为什么要用线程池?

  1. 从“为每个任务分配一个线程”转换到“在线程池中执行任务”
  2. 通过重用现有的线程而不是创建新线程,可以处理多个请求在创建销毁过程中产生的巨大开销
  3. 当使用线程池时,在请求到来时间 ,不用等待系统重新创建新的线程,而是直接复用线程池中的线程,这样可以提高响应性。
  4. 通过和适当调整线程池的大小
    ,可以创建足够多的线程以使处理器能够保持忙碌状态,同时还可以防止过多线程相互竞争资源而使应用程序耗尽内存或者失败。
  5. 一个App里面所有的任务都放在线程池中执行后,可以统一管理,当应用退出时,可以把程序中所有的线程统一关闭,避免了内存和CPU的消耗。
  6. 如果这个任务是一个循环调度任务,你则必须在这个界面onDetach方法把这个任务给cancel掉,如果是一个普通任务则可cancel,可不cancel,但是最好cancel
  7. 整个APP的总开关会在应用退出的时间把整个线程池全部关闭。

八、一些性能优化建议:

  1. 避免创建过多对象,造成频繁的gc
  2. 不要过多使用枚举,枚举占用的空间比整型大很多
  3. 字符串的拼接使用StringBuffer、StringBuilder来替代直接使用String,因为使用String会创建多个String对象,参考第一条。
  4. 使用内存缓存和磁盘缓存。

针对于性能优化,这里给大家分享《360°全方面性能调优》和《Android性能优化实战篇》,这两份资料不仅对底层原理有详细的讲解,还有各大厂的真实实践案例,能带领大家一点一点深入理解Android性能优化,让产品得到全方面的提升。

360°全方面性能调优

第一章、设计思想与代码质量优化

  • 一、六大原则
  • 二、设计模式
  • 三、数据结构
  • 四、算法

第二章、程序性能优化

  • 一、启动速度与执行效率优化
  • 二、布局检测与优化
  • 三、内存优化
  • 四、耗电优化

第三章、开发效率优化

  • 一、分
  • 二、自动化构建系统Gradle

第四章、APP性能优化实践

  • 一、启动速度
  • 二、流畅度
  • 三、抖音在 APK 包大小资源优化的实践
  • 四、优酷响应式布局技术全解析
  • 五、网络优化
  • 六、手机淘宝双十一性能优化项目揭秘
  • 七、高德 APP
  • 八、彻底干掉 OOM 的实战经验分享
  • 九、微信 Android 终端内存优化实践

Android性能优化实战篇

  1. .腾讯Bugly—对字符串匹配算法的一点理解
  2. 爱奇艺技术产品团队—干货|安卓APP崩溃捕获方案——xCrash
  3. 字节跳动技术团队— 深入理解Gradle框架之一:Plugin,Extension, buildSrc
  4. 百度APP-Android H5首屏优化实践
  5. 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
  6. 支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能
  7. 支付宝 App 构建优化解析:Android 包大小极致压缩
  8. 字节跳动技术团队—深入理解gradle框架之二:依赖实现分析
  9. 字节跳动技术团队—Scene:Android 开源页面导航和组合框架
  10. 字节跳动技术团队—抖音包大小优化-资源优化
  11. 字节跳动—Android Camera内存问题剖析
  12. 字节跳动技术团队—AwCookieManager.nativeGetCookiecrash排查
  13. 字节跳动技术团队—另类 BadTokenException 问题分析和解决