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

Android13 默认开启冻结进程

前言

Google 原生系统在 Android 11 及更高版本中引入了 CACHE 应用的 CPU 冻结功能。当应用进入后台且无活动状态时,系统会经过一段时间的状态判断,将该应用的进程 ID 迁移至冻结的 cgroup 节点,实现 CACHE 应用的冻结。这一机制旨在减少后台活跃缓存应用所占用的 CPU 资源,进而达到节省电量的效果。而当应用重新回到前台时,系统会迅速解冻该进程,确保应用的快速启动。

尽管 Google 在此功能上的开发步伐较为缓慢,从 Android 11 到 Android 13,该功能仍处于初步阶段,但国内众多厂商已提前布局,利用 CPU 调频、降速及冻结等核心技术,在 Android 6.0 及更高版本中实现了类似功能。

对于手持设备而言,CPU 冻结功能能够显著提升整体性能。鉴于电量和 CPU 资源的有限性,合理分配这些资源对于提升用户体验至关重要。

冻结进程的作用

  1. **进程的执行被暂停:**冻结的进程会被暂停,其所有线程的执行将被停止,包括应用程序的主线程以及任何后台线程。
  2. **资源释放:**冻结进程占用的资源,例如 CPU 和内存,会被释放。这些资源将被系统重新分配给其他需要执行的进程或系统服务。
  3. **电池节省:**冻结进程不会在后台运行,因此可以节省设备的电池消耗。对于后台的应用程序,冻结可以降低其电池使用量,延长设备的电池寿命。
  4. **系统稳定性:**通过冻结不活跃或低优先级的进程,可以避免它们竞争系统资源,从而提高系统的稳定性和响应能力。
  5. **快速恢复:**冻结的进程可以快速恢复其执行状态。当需要重新激活进程时,系统可以迅速将其恢复到之前的运行状态,而无需重新启动或加载应用程序。

值得注意的是,冻结进程并不会导致进程终止或应用程序销毁。它仅是将进程暂时挂起,以优化资源使用。当系统需要重新运行该进程时,它会立即被解冻并恢复运行。

adb 命令开启应用冻结

使用 adb 命令可以开启或关闭应用冻结功能。adb 命令格式如下:

adb shell settings put global cached_apps_freezer <enabled|disabled|default>

要开启应用冻结功能,可以使用以下命令:

adb shell settings put global cached_apps_freezer enabled

代码中默认开启

在framework开发中,若希望默认情况下启用应用冻结功能,可以在代码中添加相应的设置。这通常涉及到对系统全局设置的修改,以确保在应用安装或系统启动时,该功能能够自动被启用。

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

diff --git a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index 5cb4c404e09..c1e220b614a 100755
--- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -339,9 +341,19 @@
+
+    <!-- Create by yeruilai 2024-8-29 17:46:47 The process freezing function is enabled by default -->
+    <string name="def_cached_apps_freezer" translatable="false">enabled</string>
+</resources>

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 53eef230cac..a3c96455cfa 100755
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2671,6 +2679,9 @@ class DatabaseHelper extends SQLiteOpenHelper {R.integer.def_backlight_saving_power_config);loadStringSetting(stmt, Settings.Global.WIFI_P2P_DEVICE_NAME, R.string.def_wifi_direct_name);
+			// Create by yeruilai 2024-8-29 17:46:47 The process freezing function is enabled by default
+			loadStringSetting(stmt, Settings.Global.CACHED_APPS_FREEZER_ENABLED, 
+                    R.string.def_cached_apps_freezer);/** IMPORTANT: Do not add any more upgrade steps here as the global,* secure, and system settings are no longer stored in a database

http://www.mrgr.cn/news/70161.html

相关文章:

  • 电销智能机器人,怎么使用,操作复杂吗?
  • linux rocky 9.4部署和管理docker harbor私有源
  • ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习
  • Rust实战项目与未来发展——跨平台应用开发项目实践
  • 智慧机房建设整体解决方案
  • 基于h5 移动网赚项目设计与实现springboot+论文源码调试讲解
  • 【Windows】一条命令搞定文件移动与删除!`copy`、`move`、`del`详解
  • 量化研究----网格模型研究,提供源代码
  • Redis 典型应⽤-分布式锁
  • ArcGIS软件之“计算面积几何”地图制作
  • 【SSL-RL】自监督强化学习:随机潜在演员评论家 (SLAC)算法
  • Deepin 系统中安装Rider和Uno Platform
  • 《Django 5 By Example》阅读笔记:p1-p16
  • 前端-服务端渲染(SSR)和客户端渲染(CSR)的页面,在浏览器发出请求之后,分别返回的是什么
  • axios如何给某一个请求设置请求头信息
  • Python和Java就业趋势分析
  • Swift 宏(Macro)入门趣谈(一)
  • Xcode 16 中 Swift Testing 的参数化(Parameterized)机制趣谈
  • MrakDown图片
  • 关于JWT的攻击利用