5G时代,App最重要的竞争力应该是什么?

前言

用过Android和iOS的朋友应该印象比较深,相比于iOS,Android用的时间越长就会越卡.在这个网络都追求5G了的时代,“卡”这个体验显然成为了一个极拉低印象分的问题,那么该如何对产品进行优化,提高用户体验呢?

Android的性能优化,主要从以下几个方面开展:

  • 稳定(内存溢出、崩溃)

  • 流畅(卡顿)

  • 耗损(耗电、流量)

  • 安装包(APK瘦身)

影响稳定性的原因很多,比如对内存使用不够合理、代码异常、场景考虑不周全、代码逻辑不合理等,都会让应用的稳定性出现问题。其中最常见的两个场景是:Crash 和 ANR,这两个错误将会使得程序彻底崩溃。所以做好Crash全局监控,处理闪退同时把崩溃信息、异常信息收集记录起来,以便后续分析;合理使用主线程处理业务,不要在主线程中做耗时操作,防止ANR程序无响应发生。

在这里插入图片描述

(一)稳定——内存优化

(1)Memory Monitor 工具:Android Studio自带的一个内存监视工具,它可以很好地帮助我们进行内存实时分析。通过点击Android Studio右下角的Memory Monitor标签,打开工具可以看见较浅蓝色代表free的内存,而深色的部分代表使用的内存从内存变换的走势图变换,可以判断关于内存的使用状态。

(2)LeakCanary工具:LeakCanary是Square公司基于MAT开发的一款监控Android内存泄漏的开源框架。其工作的原理是:监测机制利用了Java的WeakReference和ReferenceQueue,通过将Activity包装到WeakReference中,被WeakReference包装过的Activity对象如果被回收,该WeakReference引用会被放到ReferenceQueue中,通过监测ReferenceQueue里面的内容就能检查到Activity是否能够被回收(在ReferenceQueue中说明可以被回收,不存在泄漏;否则,可能存在泄漏。

(3)Android Lint 工具:Android Lint Tool 是Android Sutido集成的一个Android代码提示工具,它可以给你布局、代码提供非常强大的帮助。硬编码会提示级别警告。

(二)流畅——卡顿优化

卡顿的场景通常发生在用户交互体验中。影响卡顿的两大因素,分别是界面绘制和数据处理。

界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。

数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。

(1)布局优化:在Android中系统对View进行测量、布局和绘制时,都是通过对View数的遍历来进行操作的。如果一个View数的高度太高就会严重影响测量、布局和绘制的速度。布局复用,使用标签重用layout;提高显示速度,使用延迟View加载;减少层级,使用标签替换复级布局;注意使用wrap_content,会增加measure计算成本;删除控件中无用属性;

(2)绘制优化:过度绘制是指在屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的 UI 结构中,如果不可见的 UI 也在做绘制的操作,就会导致某些像素区域被绘制了多次,从而浪费了多余的 CPU 以及 GPU 资源。

(3)启动优化:应用一般都有闪屏页SplashActivity,优化闪屏页的 UI 布局,可以通过 Profile GPU Rendering 检测丢帧情况。

(三)节省——耗电优化

在 Android5.0 以前,关于应用电量消耗的测试即麻烦又不准确,而5.0 之后Google专门引入了一个获取设备上电量消耗信息的API—— Battery Historian。Battery Historian 是一款由 Google 提供的 Android 系统电量分析工具,直观地展示出手机的电量消耗过程,通过输入电量分析文件,显示消耗情况。

最后提供一些可供参考耗电优化的方法:

(1)计算优化。算法、for循环优化、Switch…case替代if…else、避开浮点运算。浮点运算比常规运算更复杂,因此计算机进行浮点运算速度要比进行常规运算慢得多。

(2)避免 Wake Lock 使用不当。Wake Lock是一种锁的机制,主要是相对系统的休眠而言的,,只要有人拿着这个锁,系统就无法进入休眠意思就是我的程序给CPU加了这个锁那系统就不会休眠了,这样做的目的是为了全力配合我们程序的运行。

(3)使用 Job Scheduler 管理后台任务。在Android 5.0 API 21 中,google提供了一个叫做JobScheduler API的组件,来处理当某个时间点或者当满足某个特定的条件时执行一个任务的场景,例如当用户在夜间休息时或设备接通电源适配器连接WiFi启动下载更新的任务。这样可以在减少资源消耗的同时提升应用的效率。

(四)安装包——APK瘦身

(1)安装包的组成结构assets文件夹。存放一些配置文件、资源文件,assets不会自动生成对应的 ID,而是通过 AssetManager 类的接口获取。

(2)减少安装包大小代码混淆。使用IDE 自带的 proGuard 代码混淆器工具 ,它包括压缩、优化、混淆等功能。资源优化。

还有冷启动、热启动等很多性能优化方面的技巧,在这里就不展开赘述了。针对“性能优化”这个要点,分享给大家一份**《360°全方位Android性能优化解析》**,这份学习手册将会带领大家一步一步深入探索Android的性能优化,让产品的性能从各个方面得到提升,希望大家喜欢,需要的同学可以文末点击卡片扫码免费领取。

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

1.六大原则

单一职责原则

里氏替换原则

依赖倒转原则

接口隔离原则

……

2.设计模式

结构型模式:桥接模式、适配器模式、装饰器模式、代理模式、门面(外观)模式……

创建型模式:建造者模式、单例模式、抽象工厂模式、工厂方法模式……

数据结构:数组、栈、队列、链表、树……

算法:排序算法、查找算法……

在这里插入图片描述

第二章 程序性能优化

1.启动速度与执行效率优化

冷启动和热启动解析 APP

启动黑白屏解决办法 APP

卡顿问题分析及解决方案

启动速度与执行效率优化之 StrictMode

……

2.布局检测与优化

布局层级优化

过度渲染

……

3.内存优化

内存抖动和内存泄漏

内存大户

Bitmap 内存优化

Profile 内存监测工具

Mat 大对象与泄漏检测

耗电优化

网络传输与数据存储优化网络传输与数据存储优化

APK 大小优化

屏幕适配

……

4.耗电优化

Doze&Standby

Battery Historian

JobScheduler

WorkManager

5.网络传输与数据存储优化

google 序列化工具 protobuf

7z 极限压缩

……

6.APK 大小优化

APK 瘦身

微信资源混淆原理

……

在这里插入图片描述
7.屏幕适配

进行适配的原理

屏幕分辨率限定符与 smallestWidth 限定符适配原理

为什么选择 smallestWidth 限定符适配

怎么适配其他 module

常见问题处理

……

8.OOM 问题原理解析

adj 内存管理机制

JVM 内存回收机制与 GC 算法解析

生命周期相关问题总结

Bitmap 压缩方案总结

……

9.ANR 问题解析

AMS 系统时间调节原理

程序等待原理分析

ANR 问题解决方案

……

10.Crash 监控方案

Java 层监控方案

Nativie 层监控方案

……

在这里插入图片描述

第三章 开发效率优化

1.分布式版本控制系统

Git 企业高效持续集成平台场景介绍

GIT 分布式版本控制系统

GIT 分支管理

……

2.自动化构建系统 Gradle:

Gradle 与 Android 插件:gradle 与 android gradle 插件的关系、Gradle Transform API 的基本使用……

Gradle Transform API 的基本使用:什么是 Transform、Transform 的使用场景、Transform API 学习、输入的类型……

自定义插件开发:Gradle 插件简介、开始准备、实践、自定义 Gradle 插件、buildSrc 模块方式……

插件实战:多渠道打包、发版自动钉钉……

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_59614665/article/details/123806066