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

原生冻结进程分析(U)

一、概要

1.定义: 当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。这项功能可以减少活跃缓存应用在后台存在时所消耗的 CPU 资源,从而达到节电的目的。当应用再次切换到前台时,系统会将该应用的进程解冻,以实现快速启动。
2.作用:
  • 进程的执行被暂停:冻结的进程会被暂停,其所有线程的执行将被停止,包括应用程序的主线程以及任何后台线程。
  • 资源释放:冻结进程占用的资源,例如 CPU 和内存,会被释放。这些资源将被系统重新分配给其他需要执行的进程或系统服务。
  • 电池节省:冻结进程不会在后台运行,因此可以节省设备的电池消耗。对于后台的应用程序,冻结可以降低其电池使用量,延长设备的电池寿命。
  • 系统稳定性:通过冻结不活跃或低优先级的进程,可以避免它们竞争系统资源,从而提高系统的稳定性和响应能力。
  • 快速恢复:冻结的进程可以快速恢复其执行状态。当需要重新激活进程时,系统可以迅速将其恢复到之前的运行状态,而无需重新启动或加载应用程序。
3.挂起进程的方式
冻结是不分配cpu资源,也即进程挂起。
1)通过信号暂停进程
# 在另一个终端上发送信号。
kill -SIGSTOP 16690 # 发送信号任务给进程ID16690暂停
kill -SIGCONT 16690 # 发送信号任务给进程ID16690恢复
2)通过shell命令
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
//检查是否冻结
adb shell cat /dev/freezer/frozen/cgroup.procs
adb shell cat /sys/fs/cgroup/uid_{应用UID}/cgroup.freeze
adb logcat | grep -i "\(freezing\|froze\)"

整体架构流程

提示:这里可以添加技术整体架构
例如:
在语言模型中,编码器和解码器都是由一个个的 Transformer 组件拼接在一起形成的。

技术名词解释

提示:这里可以添加技术名词解释
例如:
  • Bert
  • GPT 初代
  • GPT-2
  • GPT-3
  • ChatGPT

技术细节

提示:这里可以添加技术细节
例如:
  • API
  • 支持模型类型
进程的OOM_ADJ (Out of Memory Adjustment)值除了决定系统内存不足的时候是否回收该进程,进程冻结策略也是依赖它去计算的。有下面的这些场景会触发进程oom adj值的重新计算,大概有切换Activity、启动广播、绑定服务、是否可见状态改变等:
1.冻结流程
  • Activity destroy的时候在ActivityRecord.setState里面就会去更新进程状态,更新进程状态的时候就会更新oom adj:
  • 进程oom adj值的重新计算最终会去到OomAdjuster.applyOomAdjLSP,在里面就会调用updateAppFreezeStateLSP去更新进程的进程冻结状态:
  • 进程oom adj值的重新计算最终会去到OomAdjuster.applyOomAdjLSP,在里面就会调用updateAppFreezeStateLSP去更新进程的进程冻结状态:
  • freezeAppAsyncLSP里面会post一个10分钟的message在时间到了的时候去冻结进程(就是10分钟之后调用Process.setProcessFrozen):
总结一下就是,如果进程的oom adj大于CACHED_APP_MIN_ADJ,就会启动一个10分钟的定时器,在10分钟之内如果进程的oom adj一直没有变回小于CACHED_APP_MIN_ADJ就会冻结进程。
2.解冻流程
  • Activity start的时候在ActivityRecord.setState里面就会去调用WindowProcessController.updateProcessInfo更新进程状态,更新进程状态的时候就会更新oom adj:
  • 最终也是会去到OomAdjuster.updateAppFreezeStateLSP,调用链路在上面的冻结流程里面已经追过,这里就省略了。可以看到如果adj小于CACHED_APP_MIN_ADJ就会调用CachedAppOptimizer.unfreezeAppLSP进行解冻:
  • 最终去到CachedAppOptimizer.unfreezeAppInternalLSP里面,如果还在10分钟的后悔时间里面就直接removeMessages删除定时器,如果进程已经冻结了就调用Process.setProcessFrozen解冻进程(frozen参数传入false)

小结

提示:这里可以添加总结
例如:
提供先进的推理,复杂的指令,更多的创造力。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据仓库系列19:数据血缘分析在数据仓库中有什么应用?
  • 基础服务安装部署教程
  • UE 【材质编辑】自定义ShadingMode
  • [Labview]图片叠加下的表格视图拖拽功能:挖坑粗糙版
  • IP SSL证书——为IP升级加密
  • 力扣1235.规划兼职工作
  • 住宅代理将如何保护您的品牌?
  • 如何在 MySQL 中匹配列
  • 微电网光储充用什么电能表?
  • SpringBoot教程(二十七) | SpringBoot集成AOP实现异常处理
  • Kubernetes 1.20 上将容器从 Docker Engine 改为 Containerd
  • 视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍
  • 【杭州】目前就业情况-自述
  • Docker安装Neo4j图数据库和APOC插件
  • 指尖疯2024年下半年软考报名快报:赛程过半,你报名成功了吗?
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • css布局,左右固定中间自适应实现
  • golang中接口赋值与方法集
  • Java IO学习笔记一
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring Cloud Feign的两种使用姿势
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 测试开发系类之接口自动化测试
  • 程序员该如何有效的找工作?
  • 第十八天-企业应用架构模式-基本模式
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 回顾2016
  • 强力优化Rancher k8s中国区的使用体验
  • 算法系列——算法入门之递归分而治之思想的实现
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 字符串匹配基础上
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • # C++之functional库用法整理
  • #### golang中【堆】的使用及底层 ####
  • #14vue3生成表单并跳转到外部地址的方式
  • #etcd#安装时出错
  • (1)(1.11) SiK Radio v2(一)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (4)Elastix图像配准:3D图像
  • (C语言)共用体union的用法举例
  • (Java)【深基9.例1】选举学生会
  • (超详细)语音信号处理之特征提取
  • (分布式缓存)Redis持久化
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原创)可支持最大高度的NestedScrollView
  • (转)菜鸟学数据库(三)——存储过程
  • (自用)交互协议设计——protobuf序列化
  • .apk 成为历史!
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net Memory Profiler的使用举例
  • .NET Reactor简单使用教程
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .net8.0与halcon编程环境构建
  • .NET企业级应用架构设计系列之应用服务器