博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...
阅读量:6112 次
发布时间:2019-06-21

本文共 2850 字,大约阅读时间需要 9 分钟。

hot3.png

前言

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

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


目录

 

示意图

 


1. 性能优化的目的

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

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

2. 需优化的性能指标

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


3. 优化方向

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

 

示意图

 

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

4. 流畅性

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

4.1 启动速度

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

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

 

示意图

 

4.2 页面显示速度

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

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

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 内存优化

  • 优化原因 避免因不正确使用内存 & 缺乏管理,从而出现 内存泄露(ML)、内存溢出(OOM)、内存空间占用过大 等问题,最终导致应用程序崩溃(Crash

  • 优化方向 常见的内存问题如下

    1. 内存泄露
    2. 内存抖动
    3. 图片Bitmap相关
    4. 代码质量 & 数量
    5. 日常不正确使用

6.2 减少安装包大小

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

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

  • 安装包结构 介绍

 

示意图

 

  • 优化方案

 

示意图

 

6.3 减少网络流量

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

  • 优化方案 主要通过 缓存 减少网络流量,采用三级缓存方案:即 内存缓存 - 硬盘缓存- 数据库- 文件 - 网络缓存

具体描述:当加载资源时,先从内存缓存中寻找;若内存缓存中没有,则从文件缓存中寻找;若文件缓存中没有,最终再通过流量从网络中加载获取

6.4 减少应用的耗电量

  • 优化原因 随着智能手机普及 & 应用程序App的功能发展,人们的日常生活都离不开智能手机 & 各式各样的应用程序App,故 应用程序的耗电量指标则显得十分重要

具体优化方案如下:

示意图

 

6.5 总结

下面,总结 关于资源节省性的性能优化方案

示意图

 


7. 总结

  • 区别于 功能性开发需求的短期性,性能优化是贯穿整个应用程序App项目的持续性需求;虽项目一开始时,性能优化的优先级较低,但当应用程序App的用户体量达到一定规模时,性能优化 则非常重要
  • 本文全面总结了Android开发中的性能优化 所有知识,含:优化方向、原因 & 具体优化方案,下面用2张图总结:

 

性能优化概述

 

 

示意图

最后给大家分享一份非常系统和全面的Android进阶技术大纲及进阶资料,及面试题集

想学习更多Android知识,请加入Android技术开发交流 7520 16839

进群与大牛们一起讨论,还可获取Android高级架构资料、源码、笔记、视频

包括 高级UI、Gradle、RxJava、小程序、Hybrid、移动架构、React Native、性能优化等全面的Android高级实践技术讲解性能优化架构思维导图,和BATJ面试题及答案!

群里免费分享给有需要的朋友,希望能够帮助一些在这个行业发展迷茫的,或者想系统深入提升以及困于瓶颈的朋友,在网上博客论坛等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我在这免费分享一些架构资料及给大家。希望在这些资料中都有你需要的内容。

Android高级技术大纲,以及系统进阶视频,及面试题和答案

 

webp

面试题及答案

 

webp

Android高级技术大纲

 

webp

Android 进阶视频资料

转载于:https://my.oschina.net/u/3956562/blog/3015670

你可能感兴趣的文章
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>