news 2026/8/25 7:59:54

Android框架杂谈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android框架杂谈

1.调用栈打印

StackTraceElement st[] = Thread.currentThread().getStackTrace();
for (int i = 0; i < st.length; i++) {
System.out.println("showInput-Stack["+i+"]"+ st[i].toString());}

2.setpowermode 中powermode对应关系

surfaceflinger层面
Off = 0
Doze = 1
On = 2
DozeSuspend = 3

3.开发者选项触摸小圆点在InputReader阶段进行绘制,具体绘制是在frameworks/base/libs/input/TouchSpotController.cpp中updateSprite函数中。

void TouchSpotController::Spot::updateSprite(const SpriteIcon* icon, float x, float y,
int32_t displayId) {
sprite->setLayer(Sprite::BASE_LAYER_SPOT + id);
sprite->setAlpha(alpha);
sprite->setTransformationMatrix(SpriteTransformationMatrix(scale, 0.0f, 0.0f, scale));
sprite->setPosition(x, y);
sprite->setDisplayId(displayId);

...

}

4.Power键亮灭屏log关键字;


【1】:kernel 上报power key[kernel log]

[53:pmic_thread]kpd: Power Key generate, pressed=0

【2】:上层收到按键事件[eng版本上才有此log,main_log]

WindowManager: interceptKeyTq keycode=26 ...

【3】PMS的wakeUp被调用[sys_log]
PowerManagerService: Waking up from Dozing

【4】:准备绘制界面[sys_log]
DisplayPowerController: Blocking screen on until initial contents have been drawn.

【5】:第一个wiating for drawn表示keyguard画完,开始画window[sys_log]
WindowManager: Waiting for drawn Window{6732b98 u0 com.android.settings/com.android.settings.SubSettings}:

【6】:底层resume时间L版本 setAutoSuspend/M版本 setPowerMode【main_log】

注意:这个log出现的时间点不是固定的,要看底层resume的时间
SurfaceControl: Excessive delay in setPowerMode(): 403ms【M 版本】
PowerManagerService-JNI: Excessive delay in autosuspend_disable() while turning screen on: 424ms【L版本】

【7】:绘制界面完成及花费的时间[sys_log]
DisplayPowerController: Unblocked screen on after 409 ms

【8】:上层设置背光[sys_log]
DisplayPowerState: Requesting new screen state: state=ON, backlight=211

【9】:底层设置背光[sys_log,亮屏时间=power key到此处的时间,不一定每个版本都有此log,kernel log]

提示:如果出现此log表示屏幕已经点亮
PhotonicModulat][name:leds&][LED]Set Backlight directly 211 at time 4294992661, mapping level is 211

【10】:亮屏操作完成[sys_log]
DisplayPowerController: Finished business

5.影响亮屏快慢的因素大致有三种:

1)设置背光流程出问题了,导致屏幕黑屏

2)window绘制时间过长,导致屏幕block时间过长

3)底层surfacecontroller准备时间过长


而根据遇到的亮屏慢的问题,基本上都是由于window绘制时间过长,导致屏幕亮屏慢
最近处理的几个亮屏慢的问题,其中关键log信息基本都是:
13-11 11:17:49.002 1313 1092 I DisplayPowerController: Blocking screen on until initial contents have been drawn.
12-18 11:18:55.020 1313 1092 I DisplayPowerController: Unblocked screen on after 6018 ms

6.

关于触发拯救模式,导致机器进入recovery。
拯救模式又称救援模式,是Android 8.0新增的一个功能。

问题场景如下:进入隐私空间,长按控制中心的移动数据按钮,此时com.android.phone进程报停,还有一定的几率进入recovery。

由于com.android.phone或者com.android.systemui是个常驻进程,不断的重启,又不断的died,所以触发救援模式。
救援模式:在com.android.phone进程的不断started与died的过程中,level等级被不断的提升,一旦到达FACTORY_RESET等级,系统就会自主进入recovery(注:最后一句log是自行添加的,用来判断是哪个进程导致触发救援模式)。
W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_DEFAULTS
W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_CHANGES
W RescueParty: Attempting rescue level RESET_SETTINGS_TRUSTED_DEFAULTS
W RescueParty: Attempting rescue level WARM_REBOOT
W RescueParty: Attempting rescue level FACTORY_RESET
所以处理进入recovery的问题,首先就要判断是不是救援模式被触发了。

7.冻屏问题总结
首先按menu看是否有反应,有反应说明不是死机冻屏

冻屏,出现过如下三种现象:

定屏1:按虚拟键有背景色,无法响应任何触摸事件,音量键无作用,power键有作用,ADB能连;

定屏2:按虚拟键无背景色,power键有作用,ADB能连;

定屏3:power键都无作用,ADB能连;

根据描述可见,如上三个现象,严重程度递增

8.Input debug开关

先执行enable_input_prop.bat脚本,然后

adb shell "getprop persist.log.tag.InputTransportPublisher"看下属性是否设置成功。成功了再抓下log

enable_input_prop.bat

@echo off
:: 设置Android系统属性以启用InputTransportPublisher的调试日志
adb shell "setprop persist.log.tag.InputTransportPublisher DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherTouchMode DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherTouchOcclusion DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherInboundEvent DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherOutboundEvent DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherDispatchCycle DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherChannelCreation DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherFocus DEBUG"
adb shell "setprop persist.log.tag.InputDispatcherAppSwitch DEBUG"
echo [SUCCESS] set property : persist.log.tag.InputTransportPublisher=DEBUG
pause

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 7:59:09

SRV111111111

This document details the SA8650 SRV surround‑view QCX usecase. Four SRV sensors run independently with the AutoSRV pipeline, containing IFE‑Lite, offline‑IFE and IPE modules, supporting NV12, UBWC_NV12 and RAW‑series outputs with constraints on simult…

作者头像 李华
网站建设 2026/8/25 7:57:29

什么是Web缓存?它有什么作用?

Web缓存就像是我们在网上看东西时&#xff0c;电脑帮我们记住了一些东西。这样&#xff0c;当我们再次想看这些东西的时候&#xff0c;电脑就可以直接给我们看&#xff0c;而不需要再去找原来的那个网站要。比如说&#xff0c;你在网上看了一个很漂亮的图片&#xff0c;然后你的…

作者头像 李华
网站建设 2026/8/25 7:54:35

机器视觉(十一):一维条码识别

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

作者头像 李华
网站建设 2026/8/25 7:54:10

机器视觉(四):空域图像增强(1)

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

作者头像 李华
网站建设 2026/8/25 7:50:00

猫盘救砖全攻略:TTL串口与U-Boot实战修复ARM嵌入式设备

1. 从“砖头”到“复活”&#xff1a;一次完整的猫盘救砖之旅手头这台猫盘&#xff0c;已经在我抽屉里躺了快一年了。当初图便宜&#xff0c;从矿难后的“海鲜市场”淘来&#xff0c;本想刷个OneSpace系统当个轻量级的家庭NAS用&#xff0c;结果一顿操作猛如虎&#xff0c;直接…

作者头像 李华
网站建设 2026/8/25 7:49:56

牛顿插值法原理与Matlab实现:从差商到工程应用

1. 从“猜数游戏”到牛顿插值&#xff1a;一个工程师的视角如果你玩过“猜数字”游戏&#xff0c;或者尝试过用几个已知点去描绘一条未知的曲线&#xff0c;那么你已经在直觉上理解了插值法的核心。在工程和科学计算中&#xff0c;我们常常面临类似困境&#xff1a;通过实验或仿…

作者头像 李华