- 博客(1053)
- 资源 (47)
- 收藏
- 关注

原创 2020-08-01 Google 省电模式
1. 省电模式主要做什么?DisplayPowerController->屏幕亮度减半VibratorService->关闭触摸震动和来电震动NetworkPolicyManagerService->限制 Doze 非白名单应用联网(WiFi与数据流量)使用WindowManagerService->关闭动画PowerManagerService->省电模式-CPU降频UiModeManagerService->开启暗色主题模式(Q平台版本新增)GnssL
2020-08-01 23:11:31
1355
1

原创 Android 剩余可用时长的计算公式
1. 剩余可用时长 BatteryStatsImpl.computeBatteryTimeRemaining 函数http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java**公式:剩余电池可用时长 = 每消耗1%的电量的平均时间 * 当前电量值 **原理:统计出每次放电的电量变化的时间,获得每消耗1%的电量的平均时间,再根据当前电量值,从而得到
2020-07-19 23:11:35
3419
2

原创 [20191207][Android10]高德地图导航功耗场景优化
1. 测试现象1.1 EPRODUCING PROCEDURES:1.进入高德 Map(data) wifi),起点为自己所在位置,搜索一个位置进行导航;2.等待30秒后开始记录电流,持续5分钟;3.按Power键,灭屏待机;4.手机灭屏15秒后开始记录电流,持续3分钟;1.2 Test numberSummaryTokyo pro设备高德地...
2019-12-07 16:55:18
3848
1

原创 GPS框架和省电
一、GPS 功能介绍1.1 术语介绍GPS是由美国国防部研制建立的一种具有全方位、全天候、全时段、高精度的卫星导航系统,能为全球用户提供低成本、高精度的三维位置、速度和精确定时等导航信息,是卫星通信技术在导航领域的应用典范,它极大地提高了地球社会的信息化水平,有力地推动了数字经济的发展1.2 GPS与GNSS区别GNSS 的全称是全球导航卫星系统(Global Navigation Sat...
2019-11-24 20:49:07
462

原创 App读写文件节点配置Se linux权限
0.文章参考https://blog.csdn.net/xiaoxiangyuhai/article/details/76270294https://blog.csdn.net/u014341735/article/details/512442581. 需求App 中进行读写Linux下的文件节点/sys/class/power_supply/battery/coulomb_cou...
2019-06-27 12:04:02
3464

原创 201805个人对于场景省电的初识
0.前言个人笔记1. 场景省电省电场景联想,后续主流手机大厂都倾向于场景识别2. 省电技术常用的省电技术,在合适的时间合适的场景遇到合适的技术,才是缘分...
2018-05-14 14:54:52
565
原创 应用标签思路参考
基于pid维度建立1.应用使用资源标签例如sensor,gps,bluetooth,audio,NFC,camera, 麦克风等,2.应用状态标签例如是否可见,前台,后台,上传下载等,3.应用和系统关联的标签例如widget,画中画,悬浮窗,知通栏等,为应用冻结,关联启动,CPU锁托管,查杀应用,限制应用的IO等快稳省策略提供标签支撑。2.基于位掩码操作例如|= 添加状态,&= ~ 清除状态,^ 检测变化管理20多个标签值,&的方式确定标签状态的值,可高效低内存获取应用的单个或多个标签状态。
2025-07-05 20:54:37
302
原创 应用标签中下载场景的思路参考
这里的接口我直接从源码的BatteryStatsImpl.java中参考,分别批量获取所有UID对应的wifi和数据流量大小,然后合并uid对应的wifi+数据的总流量大小。使用应用宝下载,下载流量速度和我前台可见差不多。基本够用,后续规避一些游戏应用后台下载场景,避免误杀和误冻结等。备注:联网其实是不稳定的,我们有时需要结合次数+(网速或流量大小)维度,进一步评估是否为下载场景,提高准确度。2.从流量大小的角度定于开始下载和停止下载的阈值。1.从网速的角度定于开始下载和停止下载的阈值。
2025-07-03 20:04:43
279
原创 HW冻结的三态机制设计思想参考
资源分级释放通过running→idle→freeze的分层过渡,确保冻结前释放非关键资源(如网络连接),避免强制杀进程导致数据丢失延迟窗口防误杀3秒延迟检查可捕获短暂活跃任务(如后台播放音乐),减少误冻结概率状态原子性冻结态通过STATE_FREEZE标签锁定,类似三态门的高阻态,确保资源彻底隔离核心流程解析(1) 状态定义与标签更新None:初始状态,无标签。Running:对应STATE_RUNNING标签,活跃态下执行ActionRunning.performAction(true)设置标签为tru
2025-07-01 21:26:32
291
原创 ANR的分析思路
bugreport 或者 /sys/kernel/debug/binder/ 下文件过滤:outgoing transaction,incoming transaction,BINDER TRANSACTIONS,BINDER TRANSACTION LOG。event log:binder_sample: 监控每个进程的主线程的 binder transaction 的耗时情况, 当超过阈值时,则输出相应的目标调用信息。(前台 10s,后台 60s)(前台 20s,后台 200s)
2025-06-29 14:01:59
539
原创 手机小厂的应用类型如何实现?
应用类型属于应用标签的一个子功能,什么是应用标签呢?管控应用需要根据应用的状态来进行管控,比如应用冻结,关联启动,CPU锁托管,查杀应用,限制应用的IO等功能,都需要根据应用的当前状态,用户没有使用时才能执行管控,不然会影响用户的体验。所以需要设计一套对每个应用的状态进行对应的打标签,提供给其它模块使用,即系统优化策略中的底座。应用标签主要提供以下能力:1)梳理常见的19种~26种需要用到的应用标签和20种左右应用类型2)标签框架插桩解耦和实现方法3)应用标签融入到系统架构中。
2025-06-27 21:27:05
351
原创 原生策略与功耗方案参考
对齐触发时序和接入绿盟异常检测与灭屏缓存不执行,延迟到亮屏再触发。4.帧率对齐:视频频率跟动画降帧后对齐,实现整体30HZ绘制刷新。定制名单和后台长链接心跳优化,使用厂商PUSH替代长链接。6.软件绘制和硬件绘制:3.0以上默认开启硬件加速绘制。7.wifi组播过滤和灭屏投屏路由的多播频繁唤醒治理。8.灭屏的Wifi fullWakeLock的限制。Wifi的组播和WifiFullLock的管理。1.2高频使用的算法优化,如压缩算法和正则优化。3.降低绘制帧率:降低应用动画等绘制帧率。
2025-06-24 21:31:31
395
原创 学习Linux进程冻结技术
进程冻结技术(freezing of tasks)是指在系统hibernate或者suspend的时候,将用户进程和部分内核线程置于“可控”的暂停状态。
2025-06-23 21:54:21
665
原创 Android中Native向System Service进行Binder通信的示例
FLAG_ONEWAY表示“不用等回信”// 包名需与writeInterfaceToken()一致package com.fadi.fadiRecord;
2025-06-19 21:32:00
313
原创 linux thermal framework(5)_thermal core
本文从thermal framework core对内部实现做一个简单的分析。
2025-06-17 21:26:38
762
原创 linux thermal framework(4)_thermal governor
thermal governor是通过一定算法控制cooling device状态来控温的在这篇文章中,我们使用一个简单的step_wise governor来说明整个过程。
2025-06-15 20:25:03
871
原创 linux thermal framework(3)_thermal cooling device
linux使用thermal cooling device来描述一个平台上可以降温的设备。
2025-06-13 22:51:05
1005
原创 linux thermal framework(2)_thermal zone
linux使用thermal zone来描述一个平台各个区域的温度信息,本文详细介绍thermal_zone相关的函数接口和相关调用过程。
2025-06-12 07:00:00
986
原创 linux thermal framework(1)_概述
热能是电子器件在通电工作后散发能量的主要方式之一,电子器件(cpu、电源适配器等)中的电阻、晶体管、集成电路等元件在工作中,电流通过导体,电子与原子碰撞,导致能量以热能形式散发。在手持移动设备(手机、手表等)中,由于接触人体皮肤,保证设备的温度在人体可接受范围内是重要的一个研发方向,硬件上可以通过选择更低功耗的电子器件或者在设备内部添加散热材料,比方说导热凝胶、石墨片、金属散热片等,来降低温度,软件上一般可以通过温度监控和动态频率调节减少热量产生的方式来降温。
2025-06-10 22:26:56
1063
原创 LMKD(Low Memory Killer Daemon)原理初识
非常明确的一点是min_score是有最小值的,最小值是0,也就是所有分数为负值的进程肯定是不会被lmkd杀掉的,在系统资源极度极度紧张的情况下,分数大于等于0的进程都会被杀掉(前台进程、后台无焦点进程、后台进程)以上就是该杀谁的内容,其实杀的进程都是app进程,后台app进程是先被杀掉的,像system_server进程、系统persistent进程它们都是负值是不会被杀掉的,甚至系统native进程它们的分数基本都是-1000,因此也是不会被杀掉的。频繁的进行进程维度的内存回收,会有性能衰退的风险。
2025-06-09 22:24:23
1029
原创 AOSP CachedAppOptimizer中的冻结和内存压缩功能
冻结(Freezer)和压缩(Compaction)的执行顺序是明确且不可随意调换的。默认顺序:先压缩,后冻结,冻结依赖压缩完成。冻结会将进程的内存页标记为不可移动(PG_dontdump),若先冻结再压缩,内核会跳过冻结进程的内存页,导致压缩失效。- 进程未被取消压缩(!冻结和内存压缩两个功能独立触发,可以单独触发也可以组合触发,默认顺序:先压缩,后冻结。- 内存碎片化严重(compact_full_rss_throttle_kb)冻结后内存页标记为不可移动(PG_dontdump),避免压缩开销。
2025-06-07 20:35:03
444
原创 Doze功耗加强方案思路参考
AOSP的Doze的最大优点是识别设备不在使用的场景并对应用进行CPU和网络活动限制,但是存着第三应用可以提高进程优先级和唤醒系统闹钟,导致doze无法正常时序进入和无法管控流氓应用。基于实际功耗问题我们提出如下方案:1.Idle期间运动状态或短暂灭屏场景,也能迅速重新进入doze同时减少窗口期延长idle时长2.60分钟内有允许唤醒系统的闹钟也可以进入doze。
2025-06-05 21:32:40
238
原创 如何爬取google应用商店的应用分类呢?
可以爬取应用的分类,但是感觉稳定哈。可能是国内VPN不稳定,且爬虫很费时间,感觉跑完也需要好几小时以上哈。我家公司没有自己的应用商店,故应用类型需要自己爬虫生成数据库,供后续代码查询实现了。执行后可以看到开始进行Google 应用商店的应用分类可视化爬虫。
2025-06-03 21:55:36
332
原创 Android的uid~package~pid的关系
Android 应用包名(例如android),一个 UID 可关联多个 Package(共享 UID 场景如android:sharedUserId="android.uid.system")。Linux 系统级用户标识,Android 中每个应用安装时分配唯一 UID(如。进程运行时动态分配的临时标识,同一 Package 可运行多个进程。(共享UID),是 Android 高效运行的基础。
2025-06-01 20:59:07
443
原创 【功耗治理】应用宝是真的猛,Doze的idle下依旧可以联网
函数名称目标场景豁免条件严格程度省电/Doze模式前台进程 或 有电源相关网络能力中低电量待机模式仅顶级进程(如锁屏)极高普通后台限制非纯后台进程 或 有网络特权低用户手动限制后台数据前台进程 或 用户发起的后台任务(经过上述优化,进程10225的应用宝进程在Doze模式下,被成功的限制网络能力了。。
2025-05-30 21:58:57
288
原创 应用宝的NotificationManagerService_post_com.tencent.android.qqdownloader持锁现象
现象:应用宝的NotificationManagerService_post_com.tencent.android.qqdownloader在Doze下也可以频繁持锁,很猛啊。解决方案:直接拦截持锁就行,也可以冻结,限制服务或主动释放锁,反正解决起来很容易。就是没想明白,为了保活目的这么拼干啥。因为在AOSP代码也就是一个if else就屏蔽掉了哈,甚至都不需要查杀或冻结操作。
2025-05-28 22:38:36
395
原创 一个简单的系统插桩实现
系统最简单的插桩就是单例模式把事件引过来,为了对于追求代码优雅和解耦的要求,也会进行通过。中插入自定义逻辑,实现对系统行为的监控或修改,同时保持原有代码结构不变。在main中是android最早的启动入口,故非常适合插桩点注入。实现逻辑进行封装,让stub接口类和stubImpl实现类解耦。DozePlusStub定义标准接口,提供单例模式插桩。换一句程序员喜欢的人话:单例模式和接口解耦实现。FadiEngineStub负责实现类的注入。单例模式+接口解耦+反射。
2025-05-26 21:27:48
205
原创 Linux电源管理(15)_PM OPP Interface
本文是分析cpufreq framework之前的一篇前置文章,用于介绍Linux电源管理中的Operating Performance Point (OPP)接口。OPP是一个单纯的软件library,用于归纳、管理各个硬件模块的、可工作的{频率}/ {电压}组合。
2025-05-24 20:31:53
969
原创 Linux电源管理(14)_从设备驱动的角度看电源管理
相信工作稍微久一点的linux驱动工程师都深有体会:在旧时光里,实现某一个设备的电源管理功能,是非常简单的一件事情。大多数设备都被抽象为platform设备,driver只需要提供suspend/resume/shutdown等回调函数,并注册到kernel即可。kernel会在系统电源状态切换的过程中,调用driver提供的回调函数,切换设备的电源状态。但是在新时代中,设备电源管理有关的操作,被统一封装在struct dev_pm_ops结构中了。
2025-05-22 20:48:05
964
原创 Linux电源管理(13)_Driver的电源管理
所以,开发者需要注意的事情,是保证设备的电源行为符合内核文档所描述的行为,即suspend的状态下,不占用CPU,不与主存交互等(但不一定需要进入low power mode),以及,使得设备的suspend/resume功能正常。这种是主观上的阻止,也即驱动开发者预见到这段代码执行过程中不能休眠,从而主动给PM Core报告事件,这种使用场景跟中断没有关系,可以根据需求在任何内核执行路径上报告事件,目的只是为了阻止休眠而已,需要注意的是,这种设置是没办法唤醒已经休眠的系统的。那么,这个特性怎么使用呢?
2025-05-19 21:40:39
679
原创 Linux电源管理(12)_Hibernate功能
出于省电和快速开机的需求, Hibernation经常被应用到Laptop和移动终端上,本文就简单讲讲Hibernation的一种实现实现方法,SWSUSP( Swap Suspend),其实swsusp从2.6开始就已经被引入到内核版本树中了,所以如果想分析swsusp的代码实现的话,还是挺方便的,只要有有2.6之后的内核代码即可。本文不会过分深入分析代码,但文章最后会给出hibernation 和 resume的整体流程图。
2025-05-17 22:39:25
926
原创 Linux电源管理(11)_Runtime PM之功能描述
软件工程的基本思想就是模块化:高内聚和低耦合。通俗地讲呢,就是“各人自扫门前雪”,尽量扫好自己的(高内聚),尽量不和别人交互(低耦合)。而RPM正体现了这一思想:每个设备(包括CPU)都处理好自身的电源管理工作,尽量以最低的能耗完成交代的任务,尽量在不需要工作的时候进入低功耗状态,尽量不和其它模块有过多耦合。每个设备都是最节省的话,整个系统一定是最节省的,最终达到无所谓睡、无所谓醒的天人合一状态。
2025-05-15 21:18:58
809
原创 Linux电源管理(10)_autosleep
Autosleep也是从Android wakelocks补丁集中演化而来的(Linux电源管理(9)_wakelocks),用于取代Android wakelocks中的自动休眠功能。它基于wakeup source实现,从代码逻辑上讲,autosleep是一个简单的功能,但背后却埋藏着一个值得深思的话题:计算机的休眠(通常是STR、Standby、Hibernate等suspend操作),应当在什么时候、由谁触发?
2025-05-13 21:40:10
740
原创 Linux电源管理(9)_wakelocks
2)否则,从wakelocks_lru_most_recent的尾部(最不活跃的),依次取出wakelock,判断它的idle时间(通过wakeup source lst_time和当前时间计算)是否超出预设值(由WL_GC_TIME_SEC指定,当前为300s,好长),如果超出且处于deactive状态,调用wakeup_source_remove,注销wakeup source,同时把它从红黑树、GC list中去掉,并释放memory资源。这种做法是相当不规范的,它是典型的只求实现功能,不择手段。
2025-05-11 20:48:44
771
原创 Linux电源管理(8)_Wakeup count功能
Wakeup count是Wakeup events framework的组成部分,用于解决“system suspend和system wakeup events之间的同步问题”。本文将结合“Linux电源管理(6)_Generic PM之Suspend功能”和“Linux电源管理(7)_Wakeup events framework”两篇文章,分析wakeup count的功能、实现逻辑、背后的思考,同时也是对这两篇文章的复习和总结。
2025-05-09 21:44:30
855
原创 Linux电源管理(7)_Wakeup events framework
本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。这个话题,是近几年Linux kernel最具争议的话题之一,在国外Linux开发论坛,经常可以看到围绕该话题的辩论。辩论的时间跨度和空间跨度可以持续很长,且无法达成一致。wakeup events framework是这个话题的一个临时性的解决方案,包括wake lock、wakeup count、autosleep等机制。它们就是本文的话题。
2025-05-07 21:28:36
1086
原创 Linux电源管理(6)_Generic PM之挂起功能
Linux内核提供了三种暂停方式:Freeze,Standby和STR(暂停到RAM),在用户空间向” / sys / power / state”文件分别写入“ freeze”,“ standby”和“ mem”,可以触发。另外内核中,挂起和恢复过程涉及到PM核心,设备PM,各个设备的驱动,平台相关的PM,CPU控制等多个模块,涉及控制台切换,进程冻结,CPU热插拔,唤醒处理等过个知识点。就让我们跟着内核代码,一一见识它们吧。
2025-05-05 19:59:15
807
原创 Linux电源管理(5)_Hibernate和Sleep功能介绍
Hibernate和Sleep两个功能是Linux PM的核心功能,它们的目的是类似的:暂停使用——>保存上下文——>关闭系统以节电········>恢复系统——>恢复上下文——>继续使用。本文以内核向用户空间提供的接口为突破口,从整体上对这两个功能进行介绍,并会在后续的文章中,分析它们的实现逻辑和执行动作。
2025-05-03 20:11:45
1175
原创 Linux电源管理(4)_Power Management Interface
Linux电源管理中,相当多的部分是在处理Hibernate、Suspend、Runtime PM等功能。而这些功能都基于一套相似的逻辑,即“Power management interface”。该Interface的代码实现于“include/linux/pm.h”、“drivers/base/power/main.c”等文件中。主要功能是:对下,定义Device PM相关的回调函数,让各个Driver实现;对上,实现统一的PM操作函数,供PM核心逻辑调用。
2025-05-01 21:50:34
805
原创 Linux电源管理(3)_关机和重启的过程
在使用计算机的过程中,关机和重启是最先学会的两个操作。同样,这两个操作在Linux中也存在,可以关机和重启。这就是这里要描述的对象。在Linux Kernel中,主流的关机和重新启动都是通过“ reboot”系统调用(具体可参考kernel / sys.c)来实现的。另外,除了我们常用的shutdown和restart两类操作之外,该系统调用也提供了其他的reboot方式,也会在这里一一说明。本文是我们在分析Linux内核时第一次遇到架构和机器的概念,顺便解释一下。
2025-04-29 22:03:50
849
支持左右箭头显示与控制的水平滚动
2014-12-24
登录界面(UI漂亮)
2014-12-24
多点触控(图片旋转与缩放
2015-04-11
高德地图轨迹回放
2014-12-17
消息通知栏demo
2014-12-22
Activity传递对象的3种方法(全)
2014-11-28
AIDL通信(含2个客户端1个服务端)
2015-01-15
高德地图轨迹回放(支持GPS纠错处理)
2014-12-17
录音和播放(含话筒效果)
2014-12-26
常用输入框正则验证
2014-12-28
使用AIDL发送数据
2014-12-24
定时器的4种方法
2014-12-30
数据库SQL基本操作(初学者)
2015-01-24
软件开发项目实践指导书
2015-04-12
丢失api-ms-win-crt-runtime-l1-1-0.dll解决
2018-01-05
ReciteInterviewQuestions_v1.0.3.rar
2021-12-27
重复文件RecycleView列表和交互逻辑实现
2021-06-27
AlphabetList.rar
2020-05-17
PyDev4.5 对应Jdk7
2018-01-03
摇一摇(ACC参数展示和位置提示)
2015-04-12
ScheduleAalarmDemoApk.rar
2020-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人