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

App Standby省电机制流程

1、流程图

在 Android 系统中,App Standby 是一种省电机制,通过限制未使用应用的后台活动来减少电量消耗。其核心逻辑在 

UsageStatsService 和 

AppIdleController 中实现,并通过系统广播(如 USB 连接状态和 IDLE 状态变化)触发相应的操作。

0

在 UsageStatsService 中,系统通过 isAppIdle 方法判断是否需要将应用囚禁。以下是应用不会被囚禁的例外情况:

1.系统应用:系统预装的应用不会进入 App Standby 状态。

2.包名为 "android" 的应用:核心系统组件不会被囚禁。

3.Doze 白名单中的应用:在 Doze 白名单中的应用不受限制。

4.正在活动的应用:当前正在前台运行或用户正在交互的应用不会被囚禁。

5.电话/短信相关应用:与电话、短信功能相关的应用不会被限制。

6.正在上传/下载的应用:正在进行网络传输的应用不会被囚禁。

7.绑定桌面小部件的应用:与桌面小部件绑定的应用不会被限制。

8.后台运行时间小于 5 秒的应用:短时间内进入后台的应用不会被囚禁。

2、架构图

0

3.理解 App Standby 模式

当用户一段时间未使用某个应用程序时,系统会将该应用标记为 App Standby(应用待机) 状态。在此状态下,系统会限制应用的后台活动(如网络访问、作业和同步),以节省电量。不过,如果满足以下任一条件,应用程序将不会进入 App Standby 状态:

用户主动启动应用:用户手动打开该应用。

应用具有前台进程:应用当前正在运行一个前台进程(例如,正在被一个 Activity 使用)。

应用显示可见通知:应用生成了一个用户可以在锁屏界面或通知托盘中看到的通知(例如,通过前台服务显示的通知)。

设备连接电源:当设备插入电源时,系统会解除应用的待机状态,允许其自由连接网络并执行未完成的任务和同步。

如果设备长时间处于空闲状态,系统会允许处于待机状态的应用 每天一次 访问网络,以便执行必要的后台任务。

4.测试 App Standby 模式

为了测试 App Standby 模式对应用程序的影响,可以按照以下步骤进行操作:

环境准备

确保测试设备(物理设备或虚拟设备)运行 Android 6.0(Marshmallow)或更高版本 的系统。

将设备连接到开发机,并安装待测试的应用程序。

运行应用程序

启动应用程序,并确保其运行某些活动(例如,触发后台任务或显示通知)。

强制进入 App Standby 模式

运行以下 ADB 命令,强制系统将应用程序设置为待机状态:

模拟设备断开电源(进入省电模式) adb shell dumpsys battery unplug 将应用程序设置为待机状态 adb shell am set-inactive <packageName> true <packageName>:替换为待测试应用程序的包名。

模拟唤醒应用程序

运行以下 ADB 命令,将应用程序从待机状态中唤醒:

将应用程序从待机状态中唤醒 adb shell am set-inactive <packageName> false 检查应用程序的待机状态 adb shell am get-inactive <packageName>

 观察应用程序行为

检查应用程序从待机状态恢复后,其 通知 和 后台活动 是否符合预期。

确保应用程序在待机模式和正常模式之间的切换不会影响其核心功能。

4.App Standby 与 Doze 模式的区别

App Standby 和 Doze 是 Android 系统中两种不同的省电机制,它们的目标都是通过限制应用的后台活动来减少电量消耗,但它们的触发条件、管控范围和行为机制有所不同。以下是它们的核心区别:

特性

Doze 模式

App Standby

触发条件

屏幕关闭 + 设备静止

应用进入后台一段时间(默认 2 小时)

管控范围

唤醒锁、网络访问、后台任务、同步、Alarm

网络访问、JobScheduler

行为机制

逐步增加休眠时间,定期维护窗口

限制后台活动,用户交互或充电时解除限制

http://www.dtcms.com/a/55122.html

相关文章:

  • 常见排序算法鉴赏(原理剖析+动图演示)
  • Vue-flow中动态流程图的实现
  • ffmpeg windows 基本命令
  • 安装并运行hadoop程序
  • macos 程序 运行
  • clang-format安装配置与vscode支持
  • 【附源码】Java动漫视频网站源码【带弹幕系统】+SpringBoot+VUE+前后端分离
  • 有关Java中的IO(2) --字符流以及其他流
  • upload-labs详解(13-20)文件上传分析
  • manus是什么?能干啥?
  • 基于SpringBoot的车辆违章信息管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)
  • LN1132 低功耗 300mA 低压差 CMOS 电压稳压器
  • debain12.9使用unsloth微调Qwen2.5模型
  • Ubuntu20.04搭建gerrit code review
  • nnMamba:基于状态空间模型的3D生物医学图像分割、分类和地标检测
  • 深度学习算法实战——情感语音合成(主页有源码)
  • LeetCode 2523. Closest Prime Numbers in Range(2025/3/7每日一题)
  • OSI七大模型 --- 发送邮件
  • 操作系统 2.4-内核级线程基本实现原理
  • 小程序和页面生命周期详解
  • 游戏元宇宙崛起:AI代理IP驱动虚拟世界“无限可能”​
  • web3区块链
  • 火绒终端安全管理系统V2.0--纵深防御体系(分层防御)之规则拦截层
  • 深度学习笔记——循环神经网络RNN
  • 2025年Q2(桥门式)起重机司机考试题库
  • 换元积分法的数学本质与几何可视化——一场关于变量代换的数学探秘
  • 深度学习驱动的智能化革命:技术演进与跨行业实践
  • React + React-intl @3.xx + TypeScript
  • DeepSeek系列模型技术报告的阅读笔记