性能优化
文章平均质量分 87
小图包
这个作者很懒,什么都没留下…
展开
-
Android ANR原理以及机制
一我们平时遇到的ANR问题大部分是input ANR类型,本文以input ANR为例进行梳理,这块机制并不复杂,受限于篇幅,本文只介绍埋下计时和check超时的代码部分。正常输入事件的分发流程如下findFocusedWindowTargetsLocked这个函数从字面不难猜出其意图: 查找有焦点的window。该函数较长,我们将其拆分开来进行梳理未找到focused的window,也未找到focused的application这种情况下,则drop该事件。原创 2023-04-09 15:15:25 · 1668 阅读 · 0 评论 -
Android屏幕刷新机制
原因是只有两个 buffer,Back buffer正在被GPU用来处理B帧的数据, Frame buffer的内容用于Display的显示,这样两个buffer都被占用,CPU 则无法准备下一帧的数据。那么,如果再提供一个buffer,CPU、GPU 和显示设备都能使用各自的buffer工作,互不影响。优先级的高低和处理顺序有关,每当收到 VSYNC 信号时,Choreographer 将首先处理 INPUT 类型的任务,然后是 ANIMATION 类型,最后才是 TRAVERSAL 类型。原创 2022-11-27 21:05:36 · 1036 阅读 · 0 评论 -
app卡顿原因
当 CPU/GPU 的处理时间超过 16ms 时,第一个 VSync 就已经到来,但缓冲区 B 的数据还没有准备好,这样就只能继续显示之前的 A 数据,从而导致丢帧现象,而后面 B 完成后,又因为没有 VSync 信号,所以 CPU/GPU 只能等待下一个 VSync 信号的来临才能继续处理下一个数据,这就导致了中间有一大段时间被浪费掉了。从图中可以看出,当 B 缓冲未准备好数据时,而 VSync 信号又来临了,C 缓冲区会接着处理下一帧数据,从而避免了 CPU/GPU 的浪费。系统是怎么保证的呢?原创 2022-08-21 16:25:38 · 712 阅读 · 0 评论 -
内存优化二Bitmap优化
一张图片Bitmap所占用的内存 = 图片长度 x 图片宽度 x 一个像素点占用的字节数 而Bitmap.Config,正是指定单位像素占用的字节数的重要参数。 其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。ALPHA_8 表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度 ARGB_4444 表示16位ARGB位图,即A=4,R=4,G=4,B=4,一个像素点占4+4+4+4=16位,2个字节 ARGB_8888 表示32位ARGB位图,即A=8,R=8原创 2022-07-09 12:13:07 · 1325 阅读 · 0 评论 -
内存优化(一)
一 内存划分Android中的内存是由谁来管理?答案是JVM虚拟机——内存大管家。从线程的角度来看,JVM在执行Java程序的过程中会将所管理的内存划分为线程私有和线程共有两大类。1.1、线程私有(1)程序计数器:Java是多线程的,既然是多线程就需要线程间切换、通信等操作。如何保证线程间操作时每个线程的执行顺序能按代码的步骤正常执行呢?这时候程序计数器就是关键了,它会帮我们记录当前线程执行到的位置(在字节码中记录的这些位置统称为指令地址)。这个内存区不会出现OOM(2)虚拟机栈:我们常提在嘴上的堆和栈,其原创 2022-06-04 17:38:08 · 383 阅读 · 0 评论 -
Android包体积优化
包大小的重要性已经不需要多说,包大小直接影响用户的下载,留存,甚至部分厂商预装强制要求必须小于一定的值。APK分析使用 ApkTool 反编译工具分析 APK; 使用AS 2.2之后提供的Analyze APK; 使用 nimbledroid 进行 APK 性能分析Proguard混淆之后,默认会在工程目录 app/build/outputs/mapping/release 下生成一个 mapping.txt 文件,这就是 混淆规则;作用: 瘦身:它可以检测并移除未使用到的类、方法、字原创 2022-04-06 22:34:56 · 2547 阅读 · 1 评论