专栏名称: Carson_Ho
走在产品路上的Android研究生
目录
相关文章推荐
开发者全社区  ·  大S的5亿遗产如何分配? ·  3 小时前  
鸿洋  ·  Android WebView ... ·  昨天  
开发者全社区  ·  陆家嘴某基金老登被曝光 ·  2 天前  
开发者全社区  ·  天王回乡的瓜 ·  2 天前  
开发者全社区  ·  辅导员投稿:和我的学生越界了 ·  2 天前  
51好读  ›  专栏  ›  Carson_Ho

Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

Carson_Ho  · 掘金  · android  · 2019-02-25 00:42

正文

阅读 285

Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言

  • Android 开发中,性能优化策略十分重要
  • 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等, 是提高用户留存率的关键
  • 本文全面讲解性能优化中的所有知识,献上一份 Android 性能优化的详细攻略, 含: 优化方向、原因 & 具体优化方案 ,希望你们会喜欢

文章较长,建议预留较长时间阅读 / 收藏


目录

示意图


1. 性能优化的目的

性能优化的目的是为了让应用程序 App 更快、更稳定 & 更省 。具体介绍如下:

  • 更快:应用程序 运行得更加流畅、不卡顿,能快速响应用户操作
  • 更稳定:应用程序 能 稳定运行 & 解决用户需求,在用户使用过程中不出现应用程序崩溃 (Crash) 和 无响应 (ANR) 的问题
  • 更省:节省耗费的资源,包括 内存占有、电池量、网络资源等

2. 需优化的性能指标

针对上述目的,需优化的性能指标 含: 流畅性、稳定性、资源节省性


3. 优化方向

  • 针对上述性能指标,本文主要讲解的优化方向如下:

示意图

  • 下面,我将针对每一种性能指标,详细讲解其优化方案

4. 流畅性

  • 优化原因 利于 减少使用中的卡顿、响应时间久等问题,给与用户一个操作流畅的体验
  • 优化方向 主要针对3个方面优化:启动速度、页面显示速度、响应速度

4.1 启动速度

  • 优化原因(即 启动速度慢的原因) 初次打开应用时,需加载很多资源 or 功能逻辑
  • 优化方案 采用 异步加载(多线程)、分步加载、延期加载 的策略,减少启动应用时加载的任务,从而提高启动速度

由于我们打开的页面大多是 Activity ,下面将给出加速启动 Activity 的方式

示意图

4.2 页面显示速度

  • 优化原因(即 页面显示速度慢的原因) a. 页面需绘制的内容(布局 & 控件)太多,从而导致页面测量时间过长 b. 绘制效率过低,从而导致绘制时间过长

  • 优化方案 布局优化 & 绘制优化。具体请看文章:

  1. Android性能优化:手把手带你全面了解 绘制优化
  2. Android性能优化:布局优化 详细解析(含、、讲解 )

4.3 响应速度

  • 优化原因 应用程序出现 ANR 情况,从而导致 应用程序响应速度慢

关于 ANR 的简介如下

示意图

  • 优化方案 使用多线程 ,将大量 & 耗时操作放在工作线程中执行
  1. 多线程的方式 包括: AsyncTask 、继承 Thread 类、实现 Runnable 接口、 Handler 消息机制、 HandlerThread
  2. 注:实际开发中,当一个进程发生了 ANR 后,系统会在 /data/anr 目录下创建一个文件 traces.txt ,通过分析该文件可定位出 ANR 的原因

4.4 其他优化方案

  • 合理的刷新机制

    示意图

  • 动画的使用

    1. 根据不同场景选择 合适的动画框架
    2. 使用 硬件加速的方式 提高流畅度
    3. 使用动画后需停止动画

4.5 总结

下面,总结 关于流畅性的性能优化方案

示意图


5. 稳定性

  • 影响 Android 应用稳定性的原因有很多,主要是:应用崩溃 (Crash) 、应用无响应 (ANR)

这2个错误的结果将导致程序无法使用

  • 下面,将主要讲解该2个优化方向:应用崩溃 (Crash) 、应用无响应 (ANR)

5.1 应用无响应(ANR)

  • 简介

示意图

  • 优化原理 尽量避免应用程序出现 ANR 情况

  • 优化方案 使用多线程 ,将大量 & 耗时操作放在工作线程中执行

  1. 多线程的方式 包括: AsyncTask 、继承 Thread 类、实现 Runnable 接口、 Handler 消息机制、 HandlerThread
  2. 关于多线程的使用,可看我写的关于多线程的文集: 多线程系列
  3. 注:实际开发中,当一个进程发生了 ANR 后,系统会在 /data/anr 目录下创建一个文件 traces.txt ,通过分析该文件可定位出 ANR 的原因

5.2 应用崩溃(Crash)

  • 优化原理 应用崩溃 Crash 很多情况是因为 内存溢出 ,即 OOM ;故 需避免出现 OOM 现象

内存溢出 简介:

示意图

5.3 总结

下面,总结 关于稳定性的性能优化方案

示意图


6. 资源节省性

  • 优化原因 由于移动设备的硬件性能有限,故减少应用程序的资源消耗显得十分重要

  • 优化方向 内存大小、安装包大小、耗电量 & 网络流量

6.1 内存优化

6.2 减少安装包大小

  • 优化原因 应用程序的安装包大小虽对应用程序的使用无影响,但影响的是:
  1. 空间占有率:即 应用程序占有手机内存的大小
  2. 下载门槛:应用的安装包越大,用户下载的门槛越高

特别在移动网络下,用户下载应用时,对安装包大小的要求更高,因此减小安装包大小可让更多用户愿意下载 & 使用产品

  • 安装包结构 介绍

示意图

  • 优化方案

示意图

6.3 减少网络流量

  • 优化原因 每次获取资源时 都通过流量 & 网络加载的方式,将耗费大量网络流量







请到「今天看啥」查看全文


推荐文章
开发者全社区  ·  大S的5亿遗产如何分配?
3 小时前
开发者全社区  ·  陆家嘴某基金老登被曝光
2 天前
开发者全社区  ·  天王回乡的瓜
2 天前
开发者全社区  ·  辅导员投稿:和我的学生越界了
2 天前
一起神回复  ·  男友出轨了,我为了报复也出轨了
8 年前
热门精选  ·  最愉快的生活方式:浪呀么浪打浪
7 年前