当前位置: 首页 > article >正文

Android framework 问题记录

一、休眠唤醒,很快熄屏

1.1 问题描述

机器休眠唤醒后,没有按照约定的熄屏timeout 进行熄屏,很快就熄屏(约2s~3s左右)

1.2 原因分析:

抓取相关log,打印休眠背光 相关调用栈

//具体打印调用栈直接从网上找即可,这里checkout了,就随便贴一个
//在frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java的isBeingKeptAwakeLocked 函数里 加入如下
Log.e("TAG", Log.getStackTraceString(new Exception("Stack trace")));

根据打印调用栈 对比正常情况,可以得知多出如下打印

java.lang.Throwableat com.android.server.power.PowerManagerService.isBeingKeptAwakeLocked(PowerManagerService.java:2909)at com.android.server.power.PowerManagerService.isItBedTimeYetLocked(PowerManagerService.java:2887)at com.android.server.power.PowerManagerService.updateWakefulnessLocked(PowerManagerService.java:2843)at com.android.server.power.PowerManagerService.updatePowerStateLocked(PowerManagerService.java:2152)at com.android.server.power.PowerManagerService.userActivityInternal(PowerManagerService.java:1698)at com.android.server.power.PowerManagerService.onFlip(PowerManagerService.java:1086)at com.android.server.power.PowerManagerService.$r8$lambda$q7dp6tNnllSjuO6t2c5KypV49H8(Unknown Source:0)at com.android.server.power.PowerManagerService$$ExternalSyntheticLambda1.accept(Unknown Source:8)at com.android.server.power.FaceDownDetector.faceDownDetected(FaceDownDetector.java:297)at com.android.server.power.FaceDownDetector.onSensorChanged(FaceDownDetector.java:284)at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:886)at android.os.MessageQueue.nativePollOnce(Native Method)at android.os.MessageQueue.next(MessageQueue.java:335)at android.os.Looper.loopOnce(Looper.java:161)at android.os.Looper.loop(Looper.java:288)at com.android.server.SystemServer.run(SystemServer.java:922)at com.android.server.SystemServer.main(SystemServer.java:618)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:568)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1023)

排查onSensorChanged中的faceDownDetected

    @Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) return;if (!mActive || !mIsEnabled) return;final float x = event.values[0];final float y = event.values[1];mCurrentXYAcceleration.updateMovingAverage(x * x + y * y);mCurrentZAcceleration.updateMovingAverage(event.values[2]);// Detect movement// If the x, y acceleration is within the acc threshold for at least a length of time longer// than the time threshold, we set moving to true.final long curTime = event.timestamp;if (Math.abs(mCurrentXYAcceleration.mMovingAverage - mPrevAcceleration)> mAccelerationThreshold) {mPrevAcceleration = mCurrentXYAcceleration.mMovingAverage;mPrevAccelerationTime = curTime;}final boolean moving = curTime - mPrevAccelerationTime <= mTimeThreshold.toNanos();// If the z acceleration is beyond the gravity/z-acceleration threshold for at least a// length of time longer than the time threshold, we set isFaceDownForPeriod to true.final float zAccelerationThreshold =mFaceDown ? mZAccelerationThresholdLenient : mZAccelerationThreshold;final boolean isCurrentlyFaceDown =mCurrentZAcceleration.mMovingAverage < zAccelerationThreshold;final boolean isFaceDownForPeriod = isCurrentlyFaceDown&& mZAccelerationIsFaceDown&& curTime - mZAccelerationFaceDownTime > mTimeThreshold.toNanos();if (isCurrentlyFaceDown && !mZAccelerationIsFaceDown) {mZAccelerationFaceDownTime = curTime;mZAccelerationIsFaceDown = true;} else if (!isCurrentlyFaceDown) {mZAccelerationIsFaceDown = false;}if (!moving && isFaceDownForPeriod && !mFaceDown) {//已知是这个导致的,把这个func注释后,现象就消失了.//关注原因,是因为G-sensor导致的,关注到调试时,板子并非按整机方式进行放置,x、y会出现问题,//最终导致执行了faceDownDetected,因而导致了亮屏后快速熄屏。faceDownDetected();} else if (!isFaceDownForPeriod && mFaceDown) {unFlipDetected();}}

1.3 解决方案:

如1.2中所述,如果G-sensor 方向不正确,有可能会导致该问题,建议调整/校准g-sensor,而不是修改framework中的代码。

相关文章:

Android framework 问题记录

一、休眠唤醒&#xff0c;很快熄屏 1.1 问题描述 机器休眠唤醒后&#xff0c;没有按照约定的熄屏timeout 进行熄屏&#xff0c;很快就熄屏&#xff08;约2s~3s左右&#xff09; 1.2 原因分析&#xff1a; 抓取相关log&#xff0c;打印休眠背光 相关调用栈 //具体打印调用栈…...

框架之下再看HTTP请求对接后端method

在当今的软件开发中&#xff0c;各类框架如雨后春笋般不断涌现&#xff0c;极大地提升了开发效率。以 Java 开发为例&#xff0c;Spring 框架历经多次迭代演进&#xff0c;而 Spring Boot 更是将开发便捷性提升到了新高度。如今&#xff0c;开发者只需简单引入 Maven 包&#x…...

Oracle APEX IR报表列宽调整

目录 1. 问题&#xff1a;如何调整Oracle APEX IR报表列宽 2. 解决办法 1. 问题&#xff1a;如何调整Oracle APEX IR报表列宽 1-1. 防止因标题长而数据短&#xff0c;导致标题行的文字都立起来了&#xff0c;不好看。 1-2. 防止因数据太长而且中间还没有空格&#xff0c;把列…...

【笔记】与PyCharm官方沟通解决开发环境问题

#工作记录 2025年5月20日 星期二 背景 在此前的笔记中&#xff0c;我们提到了向PyCharm官方反馈了几个关于Conda环境自动激活、远程解释器在社区版中的同步问题以及Shell脚本执行时遇到的问题。这些问题对日常开发流程产生了一定影响&#xff0c;因此决定联系官方支持寻求解…...

深入解析:如何基于开源OpENer开发EtherNet/IP从站服务

一、EtherNet/IP协议概述 EtherNet/IP(Industrial Protocol)是一种基于以太网的工业自动化通信协议,它将CIP(Common Industrial Protocol)封装在标准以太网帧中,通过TCP/IP和UDP/IP实现工业设备间的通信。作为ODVA(Open DeviceNet Vendors Association)组织的核心协议…...

node.js文件系统(fs) - 创建文件、打开文件、写入数据、追加数据、读取数据、创建目录、删除目录

注意&#xff1a;以下所有示例均是异步语法&#xff01; 注意&#xff1a;以下所有示例均是异步语法&#xff01; 创建文件 node.js 允许我们在计算机本地创建文件&#xff0c;例如创建一个 word 文件&#xff1a; // 引入核心模块(fs) var fs require(fs)// API fs.writeF…...

SQL:MySQL函数:空值处理函数(NULL Handling Functions)

目录 什么是空值&#xff08;NULL&#xff09;&#xff1f; 常用空值处理函数总览 1️⃣ IFNULL() – 空值替换函数&#xff08;If Null&#xff09; 2️⃣ COALESCE() – 多参数空值判断&#xff08;返回第一个非 NULL 值&#xff09; 3️⃣ NULLIF() – 相等则返回 NULL…...

利用ffmpeg截图和生成gif

从视频中截取指定数量的图片 ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpgffmpeg -i input.mp4 -ss 00:00:10 -vframes 180 output.jpg -vframes 180代表截取180帧, 实测后发现如果视频是60fps,那么会从第10秒截取到第13秒-i input.mp4&#xff1a;指定输入视频文…...

初始化一个Springboot项目

初始化一个Springboot项目 文章目录 初始化一个Springboot项目1、新建项目2、配置yml3、自定义异常4、通用相应类5、全局跨域配置6、总结 1、新建项目 首先&#xff0c;我们需要创建一个新的 Spring Boot 项目。这里我们使用 IntelliJ IDEA 作为开发工具&#xff0c;它提供了方…...

YOLOv8在单目向下多车辆目标检测中的应用

大家读完觉得我有帮助记得关注&#xff01;&#xff01;&#xff01; 摘要 自动驾驶技术正逐步改变传统的汽车驾驶方式&#xff0c;标志着现代交通运输的一个重要里程碑。目标检测是自主系统的基石&#xff0c;在提高驾驶安全性、实现自主功能、提高交通效率和促进有效的应急…...

23种设计模式解释+记忆

一、创建型模式&#xff08;5种&#xff09;—— “怎么造对象&#xff1f;” 单例模式&#xff08;Singleton&#xff09; 场景&#xff1a;公司的CEO只能有一个。 核心&#xff1a;确保一个类只有一个实例&#xff0c;全局访问。 关键词&#xff1a;唯一、全局访问。 工厂方…...

Baklib构建AI就绪型知识中台实践

Baklib驱动企业知识资产重构 在数字化转型浪潮中&#xff0c;企业知识中台的构建已成为激活数据价值的关键路径。Baklib通过结构化存储与智能分类引擎&#xff0c;将分散于邮件、文档、IM工具中的碎片化信息转化为可检索、可复用的数字资产。其核心能力体现在三个维度&#xf…...

JS逆向-某易云音乐下载器

文章目录 介绍下载链接Robots文件搜索功能JS逆向**函数a&#xff1a;生成随机字符串****函数b&#xff1a;AES-CBC加密****函数c&#xff1a;RSA公钥加密** 歌曲下载总结 介绍 在某易云音乐中&#xff0c;很多歌曲听是免费的&#xff0c;但下载需要VIP&#xff0c;此程序旨在“…...

FreeRTOS全攻略:从入门到精通

目录 一、FreeRTOS 基础概念1.1 FreeRTOS 是什么1.2 为什么选择 FreeRTOS 二、与裸机开发的区别2.1 任务管理2.2 中断处理2.3 资源管理 三、FreeRTOS 入门篇3.1 内存管理3.2 任务创建3.3 任务状态3.4 任务优先级3.5 空闲任务和钩子函数3.6 同步与互斥​3.7 队列​3.8 信号量​3…...

服务器的基础知识

什么是服务器 配置牛、运行稳、价格感人的高级计算机&#xff0c;家用电脑不能比拟的。 服务器的组成&#xff1a;电源、raid卡、网卡、内存、cpu、主板、风扇、硬盘。 服务器的分类 按计算能力分类 超级计算机 小型机AIX x86服务器&#xff08;服务器cpu架构&#xff09; …...

AGI大模型(25):LangChain提示词模版

我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活。 1 代码实现 # 我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活 from langchain_core.prompts import ChatPromptTemplate from…...

Python连接redis

第一步安装redis Releases microsoftarchive/redis 安装时勾上所有能勾上的选项下一步即可 在CMD中pip install redis 安装redis pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple 配置redis 在redis安装目录下找到 修改 line 57 bind 0.0.0.0 line…...

使用exceljs将excel文件转化为html预览最佳实践(完整源码)

前言 在企业应用中&#xff0c;我们时常会遇到需要上传并展示 Excel 文件的需求&#xff0c;以实现文件内容的在线预览。经过一番探索与尝试&#xff0c;笔者最终借助 exceljs 这一库成功实现了该功能。本文将以 Vue 3 为例&#xff0c;演示如何实现该功能&#xff0c;代码示例…...

前端面经12 函数柯里化

<script>function sum(num){return function(num2){return numnum2}}console.log(sum(1)(2))</script>面试考察 只要参数够了 达到某个数量就输出 <script>let nums[]function sum(...args){nums.push(...args)if(nums.length>5){const out (nums.slice…...

企业级 Hosts 自动化管理实战:基于 HTTP 检测的高可用域名解析方案

摘要 本文针对企业级域名解析稳定性需求&#xff0c;提供一套从IP 检测到Hosts 更新的完整自动化解决方案。通过 HTTP 状态码检测、权威 DNS 解析、原子化文件操作等核心技术&#xff0c;结合多行业真实案例&#xff0c;详细阐述方案设计、脚本实现与生产部署&#xff0c;帮助…...

告别蜘蛛池!PHP 打造你的网站专属蜘蛛导航仪

在网站优化的赛道上&#xff0c;吸引搜索引擎蜘蛛来访一直是站长和开发者关注的重点。以往借助蜘蛛池、软件等工具引蜘蛛&#xff0c;不仅存在成本高、易违规的风险&#xff0c;效果也参差不齐。现在&#xff0c;有一种更高效、更安全的方式 —— 利用 PHP 代码&#xff0c;无需…...

ubuntu kubeasz 部署高可用k8s 集群

ubuntu kubeasz 部署高可用k8s 集群 测试环境主机列表软件清单kubeasz 部署高可用 kubernetes配置源配置host文件安装 ansible 并进行 ssh 免密登录:下载 kubeasz 项⽬及组件部署集群部署各组件开始安装修改 config 配置文件增加 master 节点增加 kube_node 节点登录dashboard…...

芯驰科技与安波福联合举办技术研讨会,深化智能汽车领域合作交流

5月15日&#xff0c;芯驰科技与全球移动出行技术解决方案供应商安波福&#xff08;Aptiv&#xff09;在上海联合举办以“芯智融合&#xff0c;共赢未来”为主题的技术研讨会。会上&#xff0c;双方聚焦智能座舱与智能车控的发展趋势&#xff0c;展开深入交流与探讨&#xff0c;…...

PaddleClas 车辆属性模型vehicle_attribute_model转onnx并部署

下载paddlepaddle3.0.0 下载paddleclas 2.6.0 实验&#xff1a; 运行前输入&#xff1a; export FLAGS_enable_pir_api0 import paddleclas model paddleclas.PaddleClas(model_name"vehicle_attribute") result model.predict(input_data"/home/Pad…...

【论文#目标检测】End-to-End Object Detection with Transformers

目录 摘要1.引言2.相关工作2.1 集合预测2.2 Transformer和并行解码2.3 目标检测 3.DETR模型3.1 目标检测集合预测损失3.2 DETR架构 4.实验4.1 与Faster R-CNN的比较4.2 消融研究4.3 分析4.4 DETR用于全景分割 5.结论6.致谢 Author: Nicolas Carion, Francisco Massa, Gabriel S…...

C++:迭代器

迭代器的本质&#xff1a;对象。 迭代器与指针类似&#xff0c;通过迭代器可以指向容器中的某个元素&#xff0c;还可以对元素进行操作。 迭代器统一规范了遍历方式。不同的数据结构可以用统一的方式去遍历。 接下来是一个自定义迭代器的代码示例。 #include<iostream&g…...

MongoDB数据库深度解析:架构、特性与应用场景

在现代应用程序开发中&#xff0c;数据存储技术的选择至关重要。在众多的数据库管理系统中&#xff0c;MongoDB以其灵活性和强大的功能迅速崛起&#xff0c;成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践&#xff0c…...

【强化学习】深度强化学习 - Deep Q-Network(DQN)算法

文章目录 摘要一、DQN核心原理1. Q-learning回顾2. 用深度网络逼近Q函数3. 经验回放&#xff08;Experience Replay&#xff09;4. 目标网络&#xff08;Target Network&#xff09;5. 损失函数6. ε-贪心策略&#xff08;ε-greedy&#xff09; 二、算法流程与伪代码三、典型实…...

git 修改一个老commit,再把修改应用到所有后续的 commit

找到你想修改的 commit 的哈希值&#xff08;前7位即可&#xff09;。 git rebase -i <commit-hash>^找到你想修改的 commit 行 将行首的 pick 改为 edit 保存并退出编辑器 进行想要的修改 git add <修改的文件> git commit --amendgit rebase --continue如果…...

docker compose 启动指定的 service

使用 Docker Compose 启动指定服务 要在 Docker Compose 中启动特定的服务而不是所有服务&#xff0c;可以使用以下命令&#xff1a; docker compose up [服务名] 基本用法 启动单个服务&#xff1a; docker compose up service_name 启动多个指定服务&#xff1a; docker …...