简介 #
Choreographer 的引入,主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,也就是 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整,来控制每一帧绘制操作的时机. 目前大部分手机都是 60Hz 的刷新率,也就是 16.6ms 刷新一次,系统为了配合屏幕的刷新频率,将 Vsync 的周期也设置为 16.6 ms,每个 16.6 ms , Vsync 信号唤醒 Choreographer 来做 App 的绘制操作 ,这就是引入 Choreographer 的主要作用。
线程状态 #
Java 线程状态 #
定义在 Thread.java
的 State
枚举中。
状态 | 说明 |
---|---|
NEW(创建) | 创建态:当一个已经被创建的线程处于未被启动时,即:还没有调用start方法时,就处于这个状态。 |
RUNNABLE(运行时) | 处于可运行状态的线程正在Java虚拟机中执行,但它可能正在等待来自操作系统的其他资源,例如处理器。 |
BLOCKED(排队时) | 阻塞态:当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入Blocked状态。当该线程持有锁时,该线程将自动变成RUNNABLE状态。 |
WAITING(休眠) | 休眠态:一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态。进入这个状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒。 |
TIMED_WAITING (指定休眠时间) | 指定时间休眠态:基本同WAITING状态,多了个超时参数,调用对应方法时线程将进入TIMED_WAITING状态,这一状态将一直保持到超时期满或者接收到唤醒通知,带有超时参数的常用方法有Thread.sleep、锁对象.wait() 。 |
TERMINATED (结束) | 结束态:从RUNNABLE状态正常退出而死亡,或者因为没有捕获的异常终止了RUNNABLE状态而死亡。 |
Java 线程状态与 Cpp 线程状态映射 #
Thread.java中定义的状态 | Thread.cpp中定义的状态 | 说明 |
---|---|---|
TERMINATED | ZOMBIE | 线程死亡,终止运行 |
RUNNABLE | RUNNING/RUNNABLE | 线程可运行或正在运行 |
TIMED_WAITING | TIMED_WAIT | 执行了带有超时参数的wait、sleep或ioin函数 |
BLOCKED | MONITOR | 线程阻塞,等待获取对象锁 |
WAITING | WAIT | 执行了无超时参数的wait函数 |
NEW | INITIALIZING | 新建,正在初始化,为其分配资源 |
NEW | STARTING | 新建,正在启动 |
RUNNABLE | NATIVE | 正在在执行JNI本地函数 |
WAITING | VMWAIT | 正在等待VM资源 |
RUNNABLE | SUSPENDED | 线程暂停,通常是由于GC或debug被暂停 |
UNKNOWN | 未知状态 |
问题分析 #
问题1 #
20s 内没有执行完生命周期,例如 onCreate
。
Reason: executing service YourService
Debug 技术 #
CPU 平均负载 #
Load后面的三个数字的意思分别是1分钟、5分钟、15分钟内系统的平均负载。
Load: 3.46 / 2.71 / 1.24
hwui呈现模式分析 #
adb shell setprop debug.hwui.profile [true/visual_bars/false]
Systrace #
https://developer.android.com/topic/performance/tracing/command-line?hl=zh-cn
插桩 #
-a packageName
显示特定应用的插桩信息。
python C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools\systrace\systrace.py -t 10 -a com.intellyva.liveplayer -o C:\bz_temp\simon.html
https://mugenshenghuo.com/index.php/archives/36.html
https://www.jianshu.com/p/386bbb5fa29a
https://cloud.tencent.com/developer/article/1778496
https://developer.android.com/training/articles/perf-anr.html#anr