App 流畅运行,是用户体验的第一步。App 流程运行,涉及到性能优化,主要涉及到布局优化, 绘制优化,内存泄漏优化,响应速度优化,列表展示优化,Bitmap 优化,线程优化,包大小优化。

布局优化

  • 布局优化的思路是减少布局层次。

    • 同等层次的情况下,能使用 LinearLayout 和 FrameLayout 实现的效果,不用 ReleativeLayout 。
    • 布局复杂的情况,使用 LinearLyout 需要增加层次的情况下,使用 ReleativeLayout ,可以减少层次
    • 更加复杂的布局,使用约束布局 ContraintLayout
    • 使用 include 复用布局
    • include 配合 merge 减少层级
    • 使用 ViewStub 按需加载
  • 布局背景绘制
    • 不需要绘制背景的 View ,去掉背景图

绘制优化

  • 绘制优化指在 View 的 onDraw 的操作优化

    • 不要在 onDraw 方法创建新的局部对象, onDraw 会比较频繁的调用,会创建大量的布局对象,不仅占用内存,而且系统更加频繁 gc
    • 不要在 onDraw 方法中执行耗时任务,也不能执行大量的循环操作,循环会大量占用 CPU 时间片,造成绘制不流畅。

内存泄漏优化

  • 内存泄漏是 app 优化的一个重点,需要从两个方面重视

    1. 平时开发避免写有内存泄漏的代码
    2. 使用工具进行检测
  • 内存泄漏优化
    • 单列模式或静态变量造成内存泄漏 ---> 单例或者静态变量引用生命周期长的对象比如 Application 的 context
    • 集合造成内存泄漏 ---> 不使用的集合清空
    • 内部类或者匿名内部类造成内存泄漏 ---> 使用静态内部类或者外部类,或者使用弱引用
    • 资源使用完未关闭造成泄漏 ---> 使用完以后关闭,解绑观察者

启动速度优化

  • 启动速度分为冷启动,热启动和温启动
  • 冷启动指应用程序从头开始,可能会出现白屏或者黑屏的情况,针对该问题的优化点

响应速度优化

  • 不在 UI 线程做耗时操作,耗时操作异步处理
  • ANR
    • ANR 是指在 UI 线程做了耗时操作

      • Activity 5秒
      • BroadcastReceiver 10秒

RecyclerView 优化

  • RecyclerView 作为 ListView 的继任者,针对 ViewHolder 做了缓存处理,但是针对大量的列表还是需要做优化的

    • 避免在 BindViewHolder 中执行耗时操作
    • 列表滑动过程中不适合开启大量的异步任务
    • 分页加载数据

Bitmap 优化

  • Bitmap 是个吃内存大户,需要对 Bitmap 做好优化,Bitmap 优化比较简单
  • Bitmap 优化
    • 对图片质量压缩
    • 对图片尺寸压缩
    • 加载巨图,显示局部
    • 使用 .so 库进行压缩

线程优化

  • 线程优化的思路是使用线程池,避免创建大量的 Thead,因为创建和销毁线程也需要花费时间的,使用线程池可以做到线程的复用。
  • 针对实际业务需求,做定制化的线程池

包大小优化

  • 包的大小很关键,以我工作单位的包为例,目前已经到了53M 大小了,该项目在开始的时候才1M。53M下载安装还是很费流量和时间的。
  • 包大小优化
    • 压缩 png,jpg 资源
    • 能使用 XML 实现的效果,不使用图片
    • 把 png,jpg 转换为 webp
    • 删除无用的 drawable 资源
    • 删除 asset 无用资源
    • 开启代码混淆,即 minifyEnable = true ,开启混淆,会帮忙删除不用的代码,压缩和优化

性能建议

  • 避免创建过多的对象
  • 不要过多使用枚举,枚举比整形内存占用空间大
  • 常量使用 static final 修饰
  • 使用 Android 特有的数据结构,比如 SparseArray
  • 适当使用 软引用和弱引用
  • 采用内存缓存和硬盘缓存
  • 尽量使用静态内部类,不要采用匿名内部类和内部类

工具

Android 性能优化总结的更多相关文章

  1. 【腾讯Bugly干货分享】Android性能优化典范——第6季

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ...

  2. android 性能优化

    本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...

  3. Android性能优化典范第二季

      Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitma ...

  4. Android性能优化典范第一季

    2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...

  5. Android性能优化文章转载

    今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...

  6. 《Android性能优化》学习笔记链接<转载>

    今天找到一博文汇总了 Android性能优化 比较好的文章 ,本计划全看完,自己再精简下,因篇幅太长,先收藏了,等有时间 再仔细拜读,总结自己的看法:  第一季: http://www.csdn.ne ...

  7. [转]Android性能优化典范

    2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...

  8. [Android Pro] Android性能优化典范第一季

    reference to : http://www.cnblogs.com/hanyonglu/p/4244035.html#undefined 2015年伊始,Google发布了关于Android性 ...

  9. Android性能优化系列 + Android官方培训课程中文版

    Android性能优化典范 - 第6季 http://hukai.me/android-performance-patterns-season-6/   Android性能优化典范 - 第5季 htt ...

  10. Android性能优化之布局优化

    最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...

随机推荐

  1. 〖Android〗联想K860 logcat CM11.0出错信息及解决

    错误1: D/gpsd ( ): main() D/gpsd ( ): argv[] = '/system/bin/glgps' D/gpsd ( ): argv[] = '-c' D/gpsd ( ...

  2. 转:OGRE 源码编译方法

    编译及运行环境:Windows 7 . vs2010. 编译前的准备: 1.想编译OGRE,最起码要有OGRE的源码吧.可以去官方网站下载最新的源码包,我这里用的是1.7.2版本的,下载下来的文件叫 ...

  3. Arduino和C51开发DHT11温湿度传感器

    技术:51单片机.Arduino.DHT11.温湿度传感器.传感器   概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...

  4. 基于RESTful API 怎么设计用户权限控制?

    前言 有人说,每个人都是平等的:也有人说,人生来就是不平等的:在人类社会中,并没有绝对的公平,一件事,并不是所有人都能去做:一样物,并不是所有人都能够拥有.每个人都有自己的角色,每种角色都有对某种资源 ...

  5. awbeci—一个帮助你快速处理日常工作的网址收集网站

    大家好,我是awbeci作者,awbeci网站是一个能够快速处理日常工作的网址收集网站,为什么这样说呢?下面我将为大家介绍这个网站的由来,以及设计它的初衷和如何使用以及对未来的展望和计划,以及bug反 ...

  6. 【Mysql】php执行脚本进行mysql数据库 备份和还原

    一.mysql备份 1.这里使用 php脚本的形式进行mysql 数据库的备份和还原,想看linux的sh版本的,有时间再贴. 2.找到 mysql的[mysqldump] 执行程序,建议phpinf ...

  7. (原)tensorflow保存模型及载入保存的模型

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7198773.html 参考网址: http://stackoverflow.com/questions ...

  8. quine

    发鸠之山,其上多柘木,有鸟焉,其状如乌,文首,白喙,赤足,名曰:"精卫",其鸣自詨(音同"笑").是炎帝之少女,名曰女娃.女娃游于东海,溺而不返,故为精卫,常衔 ...

  9. html5界面手机播放mp3

    1把这段代码复制到htm5界面. <audio id="audio" src="2.mp3" style="opacity:0" pr ...

  10. MVC2 扩展Models和自定义验证(学习笔记)

    当我们利用Visual Studio生成实体类以后,难免会用到验证功能(例如,用户登录时验证用户名是否为空,并加以显示). Visual Studio实体类:实体类 如果直接去编辑Visual Stu ...