美文网首页
Android13 默认开启冻结进程

Android13 默认开启冻结进程

作者: 龙之叶 | 来源:发表于2024-11-15 00:13 被阅读0次

前言

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

相关文章

  • yarn web proxy代理

    默认开启 默认值开启proxy代理,rm进程启动就有,无需自启动。如果需要可以独立启动 1、yarn web独立开...

  • 多线程一

    线程 进程 线程的定义 线程是进程的基本执行单元 程序启动会默认开启一条线程 这条线程被称为主线程或UI线程 进程...

  • 进程&线程

    进程&线程的定义: 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行 程序启动会默认开启一条线程,这条线...

  • iOS 网络

    说下线程和进程的区别?(要注意强调进程通信和同步) 一个程序运行后,就是一个进程,默认会开启一个线程,叫做主线程,...

  • [PHP] - 编译参数 --enable-sysvsem

    翻译 红框:进程控制扩展 > 信号 这个函数支持默认不开启。使用配置--enable-sysvsem编译PHP来开...

  • php window下不使用集成环境的部署方式

    修改php.ini开启使用到的扩展 寻找一个phpfpm的进程管理程序,控制下面命令的并发与进程维护,默认情况下如...

  • (二)iOS开发之多线程—线程概念

    一.什么是线程? 1.进程中要想执行任务,必须有相应的线程,每个进程都要一个系统默认开启的主线程(iOS中也叫UI...

  • iOS多线程

    线程的定义: 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行,程序启动会默认开启一条线程,这条线程被称...

  • Redis-持久化

    持久化机制 RDB(默认开启的) RDB:Redis(单进程:不能同时处理命令和处理持久化)会单独创建fork一个...

  • iOS多线程 - 概念

    线程 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。 程序启动会默认开启一条线程,被称为主线程或UI...

网友评论

      本文标题:Android13 默认开启冻结进程

      本文链接:https://www.haomeiwen.com/subject/owlldjtx.html