- 博客(1083)
- 资源 (47)
- 收藏
- 关注
原创 2020-08-01 Google 省电模式
1. 省电模式主要做什么?DisplayPowerController->屏幕亮度减半VibratorService->关闭触摸震动和来电震动NetworkPolicyManagerService->限制 Doze 非白名单应用联网(WiFi与数据流量)使用WindowManagerService->关闭动画PowerManagerService->省电模式-CPU降频UiModeManagerService->开启暗色主题模式(Q平台版本新增)GnssL
2020-08-01 23:11:31
1533
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
4472
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
4064
1
原创 GPS框架和省电
一、GPS 功能介绍1.1 术语介绍GPS是由美国国防部研制建立的一种具有全方位、全天候、全时段、高精度的卫星导航系统,能为全球用户提供低成本、高精度的三维位置、速度和精确定时等导航信息,是卫星通信技术在导航领域的应用典范,它极大地提高了地球社会的信息化水平,有力地推动了数字经济的发展1.2 GPS与GNSS区别GNSS 的全称是全球导航卫星系统(Global Navigation Sat...
2019-11-24 20:49:07
515
原创 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
3551
原创 201805个人对于场景省电的初识
0.前言个人笔记1. 场景省电省电场景联想,后续主流手机大厂都倾向于场景识别2. 省电技术常用的省电技术,在合适的时间合适的场景遇到合适的技术,才是缘分...
2018-05-14 14:54:52
597
原创 Kernel中的cgroup2介绍
原文:日期:2015年10月作者:Tejun Heo(Linux内核维护者)文档说明本文档是cgroup v2的官方设计规范,完整描述其用户态可见的接口与行为,包括:•核心架构设计原则•所有控制器的具体行为规范•系统级约束与约定版本要求:所有后续修改必须同步更新本文档。v1文档位置:Documentation/admin-guide/cgroup-v1/index.rstTejun Heo 是 Linux 内核的重要维护者,尤其在控制组(cgroups)领域做出了重大贡献。
2025-09-06 21:58:27
1236
原创 cgroup2相关文件节点介绍
对源和目标 cgroup 的共同祖先 cgroup.procs有写入权限线程化 cgroup:读取返回 EOPNOTSUPP(因所有进程属于线程根),写入会迁移进程的所有线程。"threaded":线程化 cgroup(属于线程化子树成员)写入操作:写入 "threaded"可将 cgroup 转为线程化(单向操作)。写入:以 +(启用)或 -(禁用)前缀操作控制器(如 "+cpu -memory")。操作:写入 "1"杀死该 cgroup 及所有子 cgroup 中的进程(发送 SIGKILL)。
2025-09-02 12:10:00
845
原创 【Android 16】基于Android W 的冻结机制详解
为了解决应用在后台占用cpu资源的问题,将进程迁移到冻结的 cgroup 来冻结缓存的应用,可以减少活跃缓存应用存在的活跃和空闲 CPU 消耗,平衡了资源管理与用户体验,改善性能和功耗。版本默认状态冻结延迟核心改进技术实现Android 11(2020年)默认关闭10 分钟• 初版功能引入,基于 cgroup freezer• 支持 adj ≥ 900的缓存应用冻结• 通过 /sys/fs/cgroup///cgroup.freeze写入 1/0 控制冻结Android 12。
2025-09-01 00:15:00
1857
1
原创 【Android 16】Android W 的冻结机制内核分析
这表示当前线程有挂起的信号需要处理,内核在调度时会检查这个标志。综上,我们可以对冻结的实现做个简单总结,上层通过cgroup 中间抽象层将cgroup.freeze节点,写值为1,然后内核监控这个节点的值,对写了这个节点的进程,将jobctl中的标志位设置为 JOBCTL_TRAP_FREEZE,然后处于TIF_SIGPENDING的状态(有待处理的信号),信号处理机制监控到以后,调用内核的调度方法,将进程主动挂起,将当前进程的CPU时间让给其他进程,从而实现了进程的冻结。
2025-08-29 13:16:00
1053
原创 手机冻结技术发展时间轴
在中国,app连进入background的adj都不怎么愿意,各种app的保活提高优先级黑科技的使用,让Android生态全球最不和谐,应用会进入 CACHED_APP_MIN_ADJ的状态比较难,换句话说但凡应用后台收发广播或service行为立刻就变成非cache进程了,且如果冻结即时通讯应用,由于没有消息推送的解冻机制,会导致被冻结即时通讯应用消息接收不到。冻的应用不够多也很容易被频繁解冻。将进程迁移至冻结组,系统给进程添加冻结伪信号,当进程回到用户空间时,处理冻结伪信号进入冻结状态。
2025-08-27 12:06:50
794
2
原创 【Android 16】Android W 的冻结机制框架层分析
Android 14还针对广播进行了优化。freezeAppAsyncLSP里面会post一个10s的message在时间到了的时候调用freezeProcess去冻结进程(延时10s发送进程冻结的消息,在10s内如果收到进程解冻的消息,会把进程冻结消息移除,也就不会执行进程冻结的操作)。freezeBinder最终调用到libbinder里面去,最终判断是否是Android设备,是的话,就通过ioctl,传递BINDER_FREEZE,最终走到内核的 binder 驱动上。
2025-08-25 19:57:17
1526
原创 常用冻结调试命令
比如常见的是,在进程被冻结之后,进程还是处于 S 态,但是会在内核函数 _refrigerator 或者 do_freezer_trap 上等待。1.在内核版本 4.14的时候,进程被冻结显示的是D状态, 高版本中已经不会对进程切到 D 状态,而是保留 S 态,然后在 S 态的基础上做 freeze 的处理。在不同版本上,随着CPU的冻结这块功能的不断迭代,在高版本中已经不会对进程切到 D 状态,而是保留 S 态,然后在 S 态的基础上做 freeze 的处理。进程因为等待某个事件而被系统挂起。
2025-08-23 07:31:21
1242
原创 Android15 AndroidV冻结和解冻的场景
cgroup 最初由 Google 工程师 Paul Menage 和 Rohit Seth 在 2006 年提出,是一种细粒度资源控制的Linux内核机制。于 2007 年合并到 Linux 内核主线中。然而 Google 原生系统直到 Android 11 或更高版本上才支持 CACHE 应用的 CPU 冻结功能。当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。
2025-08-21 20:49:28
1394
原创 【学习】Linux 内核中的 cgroup freezer 子系统
cgroup_freeze中通过css_for_each_descendant_pre循环将父cgroup的freeze状态传递到各子孙cgroup中,父cgroup被freeze或者unfreeze,其目录下的子cgroup也会被freeze或者unfreeze,执行动作是在函数cgroup_do_freeze中,cgroup_do_freeze会循环遍历cgroup中的task执行cgroup_freeze_task函数做下一步的冻结/解冻操作。在本文中,我们只是简单介绍了内核冻结功能的实现逻辑。
2025-08-19 13:12:22
920
原创 Android 15 框架层冻结流程源码分析
触发条件1.当OomAdjuster计算进程的oom_score_adj≥900(CACHED_APP_MIN_ADJ)时,触发冻结决策。2.防抖机制:freezeAppAsyncLSP默认延迟10秒,避免频繁切换状态JNI层交互1.CachedAppOptimizer通过JNI调用android_os_Process_setProcessFrozen,最终由libprocessgroup操作cgroup文件节点。
2025-08-17 07:03:56
1111
原创 关联启动思路参考
1.AMS中分别对Activity\Broadcast\Service\Provider\Instrument插桩并包含caller,called,action,filter信息。3.基于非可感知拦截原则,对caller和called同时进行应用标签状态识别可见\音视频\前后台\上传下载\悬浮窗\gps\VPN\蓝牙等识别,建立通用精细化拦截规则。2.建立rule匹配机制,可自由caller,called,action,前后台和componet组合关系让拦截配置更加弹性并支持云配。实测结果非常好来着。
2025-08-15 13:27:03
153
原创 Android进程冻结机制初识
应用A打开到前台,使用完后,退到后台,启动应用B,然后A变成前APP级别,adj变成700,然后再打开应用C,这时如果A没有启动服务或者接受广播之类的,就会变成cached级别应用,那么系统就会设置一个10分钟的超时,如果10分钟的时间内,adj的级别没有变化或者没有小于cached级别,系统就会触发冻结A,如果adj变化为小于cached级别,那么就会取消冻结A。通过 cgroup 机制解除进程冻结(写入 0到 /sys/fs/cgroup/uid_/pid_/cgroup.freeze)
2025-08-13 13:11:08
1405
原创 DOU模型系数公式
小结:相对于不同厂商DOU续航模型主要还是场景定义差异(这个主要还是需要大数据查看不同机型的用户画像,例如高频使用的TOP应用和使用时长)。DOU(Daily Operating Usage)模型系数是衡量手机电池续航能力的实验室指标,其公式为:标称容量*95/24小时消耗量(各场景平均测试电流*各个模拟使用时长的总和)剩余5小时:低功耗待机(如夜间息屏),耗电量约125mAh(25mA×5h),24小时总耗电量≈2865mAh。标称容量 × 95%:电池总电量扣除5%的“安全余量”(防止过放损耗)
2025-08-11 19:42:45
6775
原创 android15哪些广播可以会走冷启动或者用于保活呢?
条件分类具体场景是否入队返回值/异常基础检查通过无权限/状态拦截,且存在有效接收者或resultTo✅ 符合SDK沙箱权限不足沙箱进程发送未授权的广播❌ 不符合抛出SecurityException用户状态无效目标用户未运行且非系统/关机广播❌ 不符合后台权限不足广播选项要求临时白名单但调用方无权限❌ 不符合抛出SecurityException受保护广播拦截非系统进程发送受保护广播(ACTION_BOOT_COMPLETED)❌ 不符合。
2025-08-09 13:12:00
403
原创 Android识别整机CTS场景思路参考
大家还有其他思路吗?起码目前思路3就基本够用了,最多加下思路2兜底一下就行。思路4.cts签名:提取应用的签名证书摘要(如 SHA-256 哈希值)思路1:穷举所有cts测试的包名(好像没人这样干了)一般会在包安装事件,进行识别整机CTS场景思路参考。思路3.cts测试项一定会安装的应用识别。思路2.cts包名正则匹配+特殊包名。
2025-08-07 13:07:18
419
原创 Android设备开机自启动的进程列表和dump自启动日志的思路参考
联发科(MTK)芯片组定制的 Telephony(通话服务)扩展模块,属于底层通信中间件,负责与基带(Modem)交互,管理 SIM 卡、信号、网络模式(如 2G/4G 切换)、运营商配置等核心功能。Android 系统设置的数据存储与管理核心服务,负责维护全局(Global)、安全(Secure)和系统(System)三类配置(如屏幕亮度、飞行模式等),数据存储在 /data/system/users/0/settings_*.xml文件中。通常预装在支持OTA升级的设备中,与系统更新服务深度绑定。
2025-08-05 12:12:09
1290
原创 观察抖音使用AuthenticatorService账号同步保活的现象
账户同步服务绑定保活原理:基于 系统账户同步机制 的后台保活方案,其核心原理是通过绑定系统账户服务(AccountManager)和同步适配器框架(Sync Adapter),利用系统级特权维持进程活跃状态Stub 授权器:AuthenticatorService继承 Service并实现 AbstractAccountAuthenticator,作为存根授权器(Stub Authenticator),满足 Sync Adapter 框架的强制要求。
2025-08-03 12:30:00
976
原创 从堆栈看Android广播拉活流程的源码流程
但是大家核心的思想或原理还是没有变化的:在不影响用户体验的前提下,对一些后台应用非可感知的冷启动或暖启动,进行是否真实用户业务需求检测,通过组件级别的拦截或放行,达到后台自启动和关联启动的智能管理效果。我们可以看出来其实没有统一标准,但是有一点是肯定的,假如进程是活跃进程(可感知进程),通俗的讲后台是否前台属性,有没有使用binder,是否上传下载,或者播放多媒体等,让进程重要度高的场景,如果是系统和厂商的后台管理策略会判断是重要进程,很多机制是豁免的。开机启动过程中,我们可以观察应用宝是怎样被拉活的?
2025-08-02 07:01:50
616
原创 应用宝(MediaRouteProviderService)媒体路由保活思路研究
答:肯定是有用的,不然应用宝也不会搞这个保活技术。如下AOSP配置就行,可以简单包名也可以精确到called,caller,action和component,从配置文件我们也可以看出来,手机厂商拦截应用后台自启动,真的可以很随心所欲啊。判断启动方和被启动方的应用标签状态,如果都非可见且被启动方(应用宝)也没有被fork,但是由于caller是系统进程想要冷启动第三方App,还是需要慎重判断拦截(例如加一些灭屏条件或剔除gms类型拉起或Media路由非真实被使用等更精细化条件辅助判断是否拦截)
2025-07-30 13:12:55
1176
原创 Android15广播ANR的源码流程分析
源码路径:frameworks/base/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java。源码路径:frameworks/base/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java。源码路径:frameworks/base/core/java/android/app/ContextImpl.java。
2025-07-28 19:36:05
396
原创 Android广播机制体系初识
其他App只要“竖起耳朵”(注册BroadcastReceiver),就能听到自己关心的广播。广播就是Android里的“喊话-听响”机制,让App之间既能默契配合,又不用互相绑死!随叫随到:静态注册的广播(像24小时待命的保安)连App没打开都能响应;”(这就是发送广播)不用互相认识:喊话的不用管谁在听,听的也不用管谁喊的,各干各的,互不打扰(解耦)别磨蹭:广播处理要快,超过10秒系统会急眼(ANR)【只有有序广播有超时机制】│ │ ├─ 超时监控:BROADCAST_TIMEOUT_MSG。
2025-07-26 06:51:38
802
原创 Android15或AndroidU广播的发送流程
1.发送广播(App喊话)App喊话:你的App调用ContextImpl.sendBroadcast(),就像对着全校喊:“注意!有消息!交给校长(AMS):消息通过Binder(类似对讲机)传给系统服务ActivityManagerService(AMS),校长负责管理全校广播。2. 广播排队(校长整理消息)分类处理:AMS检查广播类型(普通/有序)和权限,把广播塞进队列(BroadcastQueue)。
2025-07-24 20:48:26
1105
原创 广播分发中心-广播注册流程
广播是怎么注册的呢?阶段组件/数据结构作用描述存储位置/关联关系App进程阶段开发者自定义的广播接收器,实现onReceive方法处理事件。App进程(Activity/Service等组件内)将BroadcastReceiver封装为跨进程可调用的IIntentReceiver接口对象。LoadedApk中创建,关联InnerReceiver继承IIntentReceiver.Stub的Binder实体,AMS通过它回调App主线程的onReceive。
2025-07-22 21:36:26
860
原创 NDK fork拉活-底层C守护进程拉起App进程
理论 Android Daemon 在处理后台任务、长期运行的服务时非常有用。但是我使用是系统开发角度,我的工作是反保活哈。所以对我来说拦截自启动的技术也是一样的,本质就是一个return的事情解除保活状态。在Android开发中,后台服务保活一直是难题。随着系统版本升级,单纯依靠Java层的Service越来越容易被系统回收。的方案,通过JNI fork子进程监控主进程状态,实现高存活率的后台任务管理。为啥我想玩这个保活的技术呢?因为我最近有时间研究反保活,反正随便玩一玩哈。
2025-07-20 07:03:20
501
原创 Android 应用保活思路
1.1.1 onStartCommand返回START_STICKY1.1.2 onDestroy中startself1.1.3 Service后台变前置,setForground(true)1.1.4 双service(通知栏) 提高进程优先级1.1.5 监听系统广播,如开机,锁屏,亮屏等重新启动服务1.1.6 alarm定时器,启动服务。
2025-07-18 20:51:21
480
原创 自启动策略调研
callingPackage.equals(calledPkg) 且 inActivitySelfCallWhitePkgList(callingPackage)callerApp.processName.contains(pkgName))系统限制后台启动(restrictStartupBg())且包名在限制列表(inRestrictAppList)isCpnType)且非Top应用(!intent == null 或 intent.getComponent() == null。
2025-07-16 21:51:51
822
原创 观察应用宝进程的自启动行为
观察应用宝进程的自启动行为自启动方式触发场景/原理进程标识拦截策略BindService绑定服务通过bindService()绑定系统/其他应用服务,被杀后重新绑定拉活(高频触发)Service拦截策略(含startService和bindService)ContentProvider拉活注册ContentProvider,其他应用访问时自动唤醒:daemonContentProvider广播拦截AccountManager同步利用系统账户同步机制定期唤醒(同步间隔≥60秒)
2025-07-14 22:34:40
995
原创 AOSP自启动拦截框架Intent Firewall
Intent Firewall是AOSP提供一套匹配自启动拦截框架,主要核心逻辑在service的firewall目录,拦截逻辑核心类是IntentFirewall,但AOSP的逻辑仅仅包含activity、service和broadcast简单根据配置文件名单拦截逻辑,且aosp没有提供配配置文件,故相当于功能没有生效。
2025-07-10 21:26:56
323
原创 Linux cpuidle framework(1)_概述和软件架构
在计算机系统中,CPU的功能是执行程序,总结起来就是我们在教科书上学到的:取指令(Fetch)、译码(Decode)、执行(Execute)。那么问题来了,如果没有程序要执行,CPU要怎么办?也许您会说,停掉就是了啊。确实,是要停掉,但何时停、怎么停,却要仔细斟酌,因为实际的软硬件环境是非常复杂的。我们回到Linux kernel上,Linux系统中,CPU被两类程序占用:一类是进程(或线程),也称进程上下文;另一类是各种中断、异常的处理程序,也称中断上下文。
2025-07-08 08:00:00
956
原创 应用标签思路参考
基于pid维度建立1.应用使用资源标签例如sensor,gps,bluetooth,audio,NFC,camera, 麦克风等,2.应用状态标签例如是否可见,前台,后台,上传下载等,3.应用和系统关联的标签例如widget,画中画,悬浮窗,知通栏等,为应用冻结,关联启动,CPU锁托管,查杀应用,限制应用的IO等快稳省策略提供标签支撑。2.基于位掩码操作例如|= 添加状态,&= ~ 清除状态,^ 检测变化管理20多个标签值,&的方式确定标签状态的值,可高效低内存获取应用的单个或多个标签状态。
2025-07-05 20:54:37
433
原创 应用标签中下载场景的思路参考
这里的接口我直接从源码的BatteryStatsImpl.java中参考,分别批量获取所有UID对应的wifi和数据流量大小,然后合并uid对应的wifi+数据的总流量大小。使用应用宝下载,下载流量速度和我前台可见差不多。基本够用,后续规避一些游戏应用后台下载场景,避免误杀和误冻结等。备注:联网其实是不稳定的,我们有时需要结合次数+(网速或流量大小)维度,进一步评估是否为下载场景,提高准确度。2.从流量大小的角度定于开始下载和停止下载的阈值。1.从网速的角度定于开始下载和停止下载的阈值。
2025-07-03 20:04:43
335
原创 HW冻结的三态机制设计思想参考
资源分级释放通过running→idle→freeze的分层过渡,确保冻结前释放非关键资源(如网络连接),避免强制杀进程导致数据丢失延迟窗口防误杀3秒延迟检查可捕获短暂活跃任务(如后台播放音乐),减少误冻结概率状态原子性冻结态通过STATE_FREEZE标签锁定,类似三态门的高阻态,确保资源彻底隔离核心流程解析(1) 状态定义与标签更新None:初始状态,无标签。Running:对应STATE_RUNNING标签,活跃态下执行ActionRunning.performAction(true)设置标签为tru
2025-07-01 21:26:32
379
原创 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
803
支持左右箭头显示与控制的水平滚动
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关注的人
RSS订阅