![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android 性能优化
文章平均质量分 86
Android性能优化全面分析!
卜大爷
鹅厂客户端开发负责人,T11级,鹅厂通道评委
展开
-
Android打印当前运行中的所有线程信息
Android打印当前运行中的所有线程信息原创 2022-10-15 00:11:02 · 2838 阅读 · 2 评论 -
Android Transform API 从原理到实战
Transform API从 1.5.0-beta1 开始,Gradle 插件包含一个 Transform API,允许第三方插件在将已编译的类文件转换为 dex 文件之前对其进行操作。(该 API 已存在于 1.4.0-beta2 中,但已在 1.5.0-beta1 中进行了彻底修改)Transform API 的目标是简化注入自定义类的操作而不必处理任务,并为操作内容提供更大的灵活性。内部代码处理(jacoco,progard,multi-dex)已经在 1.5.0-beta1 中转移到了这一新机原创 2021-03-01 14:40:07 · 5910 阅读 · 4 评论 -
Gradle ExtenionContainer 创建和使用扩展参数(extensions)详解
Gradle ExtenionContainer 创建和使用扩展参数(extensions)详解我们在开发 Gradle 插件时,大多数插件都需要从构建脚本中获取一些配置,这样就可以根据项目的不同,对 Gradle 插件传递不同的配置,而不需要修改插件内的代码。我们可以使用 ExtensionContainer 来实现 Gradle 的扩展(参数传递能力)。ExtenionContainer每个 Gradle 的 Project 都维护了一个 ExtenionContainer,我们可以通过 pro原创 2021-02-25 20:10:28 · 3205 阅读 · 0 评论 -
Gradle 插件上传 Maven 库配置详解
Gradle 插件上传 Maven 库配置详解Gradle 插件上传 Maven 库,有两种方式,本文分别进行介绍。Old Maven PluginGradle 1.0 中提供的原始的,过时的发布机制将工件部署到 Maven 存储库。如果我们的项目仅生成默认的 jar 文件。现在,想将此 jar 文件部署到本地 Maven 存储库,怎么做呢?build.gradle 声明使用 Maven plugin 插件,需要在项目的构建脚本 build.gradle 上添加插件引用声明:apply pl原创 2021-02-25 20:08:59 · 5304 阅读 · 1 评论 -
在Gradle 插件中统计并打印 Task 任务耗时
在Gradle 插件中统计并打印 Task 任务耗时我们在使用 Gradle 构建任务时,有时想统计每个任务的耗时情况,以此发现每个任务的运行时间,以及是否存在可优化空间。使用 Listener 进行监听Gradle 提供了很多构建生命周期钩子函数。1. 我们可以用 TaskExecutionListener 来监听整个构建过程中 task 的执行:public interface TaskExecutionListener { void beforeExecute(Task task原创 2021-02-25 20:07:59 · 1882 阅读 · 2 评论 -
gradle 插件以及执行过程解析
gradle 插件以及执行过程解析在 Android Studio 中,项目都是使用 Gradle 来构建的,那么我们通常使用的 Gradle 插件是如何执行的呢?Gradle 的执行步骤简单说 gradle 是一种构建工具,用来控制代码的编译、构建、打包等过程,有点像 C/C++ 项目中的 Make 工具。gradle 执行一次 build 总共可以分为三个步骤:1. 初始化阶段读取根工程中 setting.gradle 中的 include 信息,确定当前项目中哪几个工程加入构建,创建 pr原创 2021-01-30 16:22:46 · 23076 阅读 · 0 评论 -
创建自定义 gradle 插件的三种方法
创建自定义 gradle 插件的三种方法要创建 Gradle 插件,我们需要编写一个实现 Plugin 接口的类。将插件应用于项目时,Gradle 将创建插件类的实例,并调用该实例的 Plugin.apply()方法。项目对象作为参数传递,插件可以使用该参数配置项目。开发语言gradle 插件比较主流的开发语言是 groovy,因为 gradle 就是用 groovy 写的。除了 groovy 还可以用来开发 gradle 插件的语言有:javakotlin其它基于 jvm 语言因为原创 2021-01-30 16:19:32 · 24322 阅读 · 0 评论 -
Android studio 中 gradle 的使用
Android studio 中 gradle 的使用当我们创建一个新的工程,Android studio 会默认为我们创建三个 gradle 文件:两个 build.gradle 文件和一个 settings.gradle 文件。settings.gradle 文件位于项目根目录下,而 build.gradle 分别放在了根目录和 moudle 目录下。下面是gradle文件的构成图: MyApp ├── build.gradle ├── settings.gradle └──原创 2021-01-30 16:14:26 · 24706 阅读 · 0 评论 -
Gradle 安装和配置教程
Gradle 安装和配置教程本文介绍 Gradle 安装和配置过程。查看 Android Studio 是否存在如果按照了 Android Studio,那么 Gradle 的安装包应该已经下载下来了,我们可以通过以下方式找到。在“应用程序”选择“Android Studio”图标,右键,选择“显示报内容:通常这里会有一个 gradle 文件夹(下图中好像没有,别着急~):示例中并没有这个文件夹,怎么办呢?答案是手动创建一个 gradle 目录,并下载 Gradle 安装包。下载、安装原创 2021-01-30 16:12:53 · 25084 阅读 · 0 评论 -
Android 最新混淆编译器 R8 优化你的安装包
Android 最新混淆编译器 R8 优化你的安装包为了尽可能减小应用的大小,我们应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,还会产生另外2项好处:一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功能会采用更积极的策略来进一步减小应用的大小。Android 中,通过混淆编译器来实现以上能力,在早起 Android Studio 版本中,混淆编译器使用的是 ProGuard 执行编译时代码优化,当我们使用 Android Gradle 插件 3原创 2021-01-25 16:24:49 · 26656 阅读 · 0 评论 -
Android Lint 原理及使用详解
Android Lint 原理及使用详解Android Lint 是 ADT 16中引入的新工具,用于扫描 Android 项目源中的潜在错误。Lint 是 Android 提供的一个强大的,用于静态扫描应用源码并找出其中的潜在问题的实用工具。lint 工具可以检查你的 Android 项目源文件是否有潜在的错误,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。Lint 既可以用作命令行工具,也可以与 Eclipse 和 IntelliJ 集成在一起。它被设计成独立于 ID原创 2021-01-25 16:23:07 · 25916 阅读 · 0 评论 -
Android 包大小优化总结
Android 包大小优化总结众所周知,尽量减少 APP 安装包的大小是非常必要的,减少安装包大小,不仅减少了用户下载时的网络流量消耗,而且还减少了用户的下载等待时间。更重要的是安装包大小也会影响下载转化率。同时,APP 在安装运行过程中,越大的安装包,通常应用安装的时间也会更长,之后再运行时也会占用更大的内存空间。通常,直观来看,减少程序安装包的大小有两条路径:减少程序资源的大小。减少程序的代码量。1. 优化代码大小开启代码压缩、混淆和优化来减少和优化代码。作用代码缩减:从应用原创 2021-01-23 21:49:33 · 23860 阅读 · 0 评论 -
Android 渲染性能优化——技能图
Android 渲染性能优化——技能图以上是渲染性能优化技能概览图,详细内容请看:《Android 渲染机制——原理篇(显示原理全过程解析)》《Android 渲染性能优化——你需要知道的一切!》还有更多、更多。。。–>《Android 性能优化》...原创 2020-12-10 20:33:50 · 23610 阅读 · 0 评论 -
Android 渲染性能优化——你需要知道的一切!
本文将分以下几个部分来分析和总结渲染性能:帧率和渲染性能问题、渲染性能问题产生的原因、渲染性能优化方法、分析工具。原创 2020-12-10 20:28:37 · 26319 阅读 · 0 评论 -
Android 性能分析工具——Perfetto 介绍
Android 性能分析工具——Perfetto 介绍Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让你以 protobuf 编码的二进制流形式记录任意长度的跟踪记录。你可以在 Perfetto 界面中打开这些跟踪记录。相对的,Systrace 是平台提供的旧版命令行工具,可记录短时间内的设备活动,并保存在压缩的文本文件中。该工具会生成一份原创 2020-12-09 18:01:25 · 37827 阅读 · 1 评论 -
Android 渲染机制——原理篇(显示原理全过程解析)
帧率每秒的帧数(fps)或者说帧率是以帧为单位的位图图像每秒连续出现在显示器上的次数(速率)。简单来说就是一秒钟,屏幕显示多少张画面。为什么是 60fps ?人类视觉的时间敏感度和分辨率根据视觉刺激的类型和特征而变化,并且在个体之间不同。人类视觉系统每秒可处理10到12个图像并单独感知它们,而较高的速率则被视为运动。12fps 大概类似手动快速翻动书籍的帧率,这明显是可以感知到不够顺滑的。24fps 使得人眼感知的是连续线性的运动,这其实是归功于运动模糊的效果。24fps 是电影胶圈通常使用的帧率,原创 2020-12-09 14:16:00 · 40940 阅读 · 14 评论 -
Android 渲染机制——绘制模型
Android 绘制模型由于 CPU 和 GPU 的设计不同,CPU 更擅长复杂逻辑控制,而 GPU 得益于大量 ALU 和并行结构设计,更擅长数学运算。在 Android 中,页面由各种基础元素(DisplayList)构成,渲染时需要进行大量浮点运算,这些工作更适合交给 GPU 来做。Android 为了提高视图渲染的性能,在 Android 3.0 中引入了硬件加速。这样 Android 中就存在了2种绘制模型了。Android 有两种绘制模型:基于软件的绘制模型硬件加速绘制模型基于原创 2020-12-09 14:01:29 · 25545 阅读 · 0 评论 -
Android 渲染机制——SurfaceFlinger
SurfaceFlingerAndroid 图形架构使用了生产者——消费者模型。Surface 表示缓冲队列中的生产方,图像流最常见的消耗方是 SurfaceFlinger,该系统服务接收来自于多个源的数据缓冲区,组合它们,并将它们发送给显示设备。Android 应用程序为了能够将自己的 UI 绘制在系统的帧缓冲区上,它们就必须要与 SurfaceFlinger 服务进行通信。SurfaceFlinger 服务运行在 Android 系统的 System 进程中,它负责管理 Android 系统的帧缓原创 2020-12-09 13:59:42 · 31362 阅读 · 1 评论 -
Android 渲染机制——Display List
Display ListAndroid 需要把 XML 布局文件转换成 GPU 能够识别并绘制的对象。这个操作是在 DisplayList 的帮助下完成的。DisplayList 持有所有将要交给 GPU 绘制到屏幕上的数据信息。Display List 是什么?Display List 是一个缓存绘制命令的 Buffer,Display List 的本质是一个缓冲区,它里面记录了即将要执行的绘制命令序列。Display List 是视图的基本绘制元素,包含元素原始属性(位置、尺寸、角度、透明度等原创 2020-12-09 13:58:27 · 27155 阅读 · 1 评论 -
Android 显示刷新机制、VSYNC和三重缓存机制
Android 显示刷新机制、VSYNC和三重缓存机制为了理解 APP 是如何进行渲染的,我们就必须了解手机硬件是如何工作的,也必须理解什么是 VSYNC。首先,我们需要了解2个相关概念:刷新率(Refresh Rate):代表了屏幕在一秒内刷新屏幕的次数,这取决于硬件的固定参数,例如 60Hz。帧率(Frame Rate):代表了 GPU 在一秒内绘制操作的帧数,例如 30fps,60fps。GPU 会获取图形数据进行渲染,然后硬件负责把渲染后的内容呈现到屏幕上,他们两者不停的进行协作。原创 2020-12-09 13:57:22 · 30225 阅读 · 5 评论 -
Android性能优化之——线程性能
Android性能优化之——线程性能Android 主线程与子线程Android 主线程负责 UI 的显示等工作,所以也成为 UI 线程,UI 线程如果阻塞,会导致界面卡顿、ANR 等问题。我们为了保证 UI 的流畅性,一些耗时的工作就不能在主线程中进行处理了,例如,网络操作、I/O 操作等。绝大多数,耗时操作都应该在子线程中处理。在 Android 中,使用子线程有多种方式,我们介绍一些常用的方式。Android 异步任务方式关于如何在 Android 中使用线程来创建并执行异步任务,详情请原创 2020-12-04 14:15:22 · 23769 阅读 · 0 评论 -
Android 性能优化之——高性能使用图片全面总结
本文针对如何高性能的在 Android 中使用和处理图片进行了全面、多维度的分析。原创 2020-12-03 11:11:25 · 25645 阅读 · 0 评论 -
Android渲染性能——过度绘制
过度绘制是我们在开发过程中,常见的一种性能问题,按照性能影响的分类,它应该属于渲染性能。那么过度绘制到底代表了什么含义呢?我们又如何能够避免过度绘制呢?原创 2020-11-25 20:15:23 · 27846 阅读 · 4 评论 -
Android 启动性能、启动性能分析以及常见的启动性能问题分类
1. 本文介绍了为什么要提高我们 APP 的启动时间,启动时间过慢会产生哪些糟糕的影响。2. 应用启动内部机制是什么,启动状态可以分为:冷启动、温启动和热启动三种类型,以及分别介绍了每种启动类型的具体启动过程。3. 第二部分介绍了通过什么方式来获取应用的启动时间,以及如何对启动耗时进行分析。4. 最后一部分介绍了常见的启动性能问题分类及常见优化方案。...原创 2020-11-23 17:29:44 · 25618 阅读 · 6 评论 -
Android启动性能优化——闪屏及Splash页
Android启动性能优化——闪屏及Splash页本文我们将分析如何使用系统闪屏和 Splash 页来提升 APP 的启动性能。闪屏闪屏页是什么?启动闪屏不仅仅可以作为品牌宣传页,还能够减轻用户对启动耗时的感知,但是如果使用不恰当,将适得其反。当点击桌面图标启动 APP 的时候,程序会显示一个启动窗口,一直到页面的渲染加载完毕。如果程序的启动速度足够快,我们看的闪屏窗口停留显示的时间则会很短,但是当程序启动速度偏慢的时候,这个启动闪屏可以一定程度上减轻用户等待的焦虑感,避免用户过于轻易的关闭应用。原创 2020-11-23 16:03:04 · 27366 阅读 · 0 评论 -
Android启动性能优化——分析篇
本文介绍了获取和分析启动时间性能的几种方式,使用这几种方式可以很方便和全面的分析和追踪我们的 APP 启动耗时,以解决我们的 APP 启动相关的性能问题。原创 2020-11-23 15:56:12 · 26204 阅读 · 14 评论 -
如何使用“GPU 呈现模式”进行卡顿问题定位
本文介绍“GPU 呈现模式”的使用,以及如何使用“GPU 呈现模式”进行卡顿问题定位和分析。原创 2020-11-12 11:54:16 · 26904 阅读 · 0 评论 -
Android性能之——线上帧率检测的实现
Android性能之——帧率检测本文我们来学习如何实现帧率的检测。为什么要检测帧率Android在设计的时候,把帧频限定在了每秒60帧,当我们的APP的帧频60fps时,画面就会非常的流程。但是通常由于各种各样的原因,帧频很可能会小于60fps,这样就会出现丢帧现象,用户端表现为可感知的卡顿等现象。那面我们的帧频可以高于60fps吗,答案是否定的,这是因为界面刷新渲染依赖底层的VSYNC信号,VSYNC信号以每秒60次的频率发送给上层,并且高于60fps的帧频也是没有必要的,因为人眼与大脑之间的协作原创 2020-11-11 17:36:52 · 27524 阅读 · 2 评论 -
Android卡顿的检测及优化方法汇总(线下+线上)
本文介绍了卡顿是什么,以及如何使用适合的工具发现卡顿、如何在线上和线下环境实现卡顿的监控。原创 2020-11-09 17:56:49 · 30348 阅读 · 0 评论 -
性能分析工具Systrace的使用详解
Systrace介绍Systrace 是Android平台提供的一款工具,用于记录短期内的设备活动。该工具会生成一份报告,其中汇总了Android内核中的数据,例如CPU调度程序、磁盘活动和应用线程。这份报告可帮助我们了解如何以最佳方式改善应用或游戏的性能。Systrace 工具用于显示整个设备在做些什么,不过也可用于识别应用中的卡顿。Systrace 的系统开销非常小,因此你可以在插桩测试期间体验实际卡顿情况。Systrace报告示例:这份报告提供了 Android 设备在给定时间段内的系统进原创 2020-11-04 19:23:54 · 49816 阅读 · 1 评论 -
Android Studio CPU profiler性能分析工具介绍和使用详解
本文介绍了Android Studio CPU profiler性能分析工具的使用,以及如何使用Android Studio CPU profiler解决我们的APP耗时,卡顿等问题。原创 2020-11-04 19:08:39 · 36727 阅读 · 2 评论 -
Android布局分析工具Layout Inspector(解决布局产生的性能问题)
我们在Android开发中,如果出现了页面打开时间慢,该如何分析解决呢?其实有很多原因可以导致页面打开慢,例如cpu占用过高、主线程进行耗时任务、布局复杂、布局层级过深等,其中最常见的就是布局问题了,我们重点来看如何解决布局相关的性能问题。...原创 2020-10-22 17:46:17 · 33105 阅读 · 0 评论 -
Android UI卡顿检测(二)——基于WatchDog原理的方案(线上方案)
由于在Android 5.0及以上系统中,默认启动了SELinux机制,所以我们的App在线上场景中,不能获得ANR的系统日志。但是ANR又是我们App稳定性指标的一部分,所以有此方案,配合前文 Android UI卡顿检测(一)——基于Handler机制的实现方案(线上方案) 来保障App在线上运行中的体验。...原创 2020-05-27 21:08:56 · 25246 阅读 · 0 评论 -
Android UI卡顿检测(一)——基于Handler机制的实现方案(线上方案)
本文分析了Android中UI产生卡顿的原因,以及实现卡顿检测方案的分析。并且,实现了超级实用的基于Handler机制的卡顿检测工具,附有原理分析,代码实现。该方案可用于线上的性能监控。原创 2020-05-22 18:31:27 · 27176 阅读 · 0 评论 -
程序被系统kill——Service进程滥用
问题描述程序在后台常驻运行过程中被某厂商手机系统kill,发现kill进程的是系统的电量管理相关进程。但是手机已经赋予我们APP所有权限,依然会被kill。我们通过开启手机工程模式,得到以下日志:分析通过日志分析,发现download进程短时间内启动了124次,现在问题可以初步定为到:download进程。通过查找源码发现原创 2017-07-13 16:57:52 · 4787 阅读 · 0 评论