Doze和App Standby模式下的Android应用适配

本文详细介绍了Android 6.0引入的Doze和AppStandby两种电量管理模式,旨在延长设备使用时间。Doze模式通过限制后台应用的CPU和网络使用,AppStandby则是通过限制未使用的后台应用网络请求。开发者需要针对这两种模式进行应用适配,确保在低电耗状态下仍能正常运行。测试方法包括使用adb命令模拟Doze和AppStandby模式,确保应用在这些模式下能平滑恢复和正常运行。同时,文章提到了GCM在低电耗模式下的重要性,以及应用如何申请进入白名单以避免电量管理限制。

从Android6.0(API23)开始, Google为Android加入了两种省电特性,通过管理Android应用(以下简称应用)在非充电状态下的设备中的运行策略来达到延长用户的Android设备使用时间的目的。这两种特性存在一定的差别,Doze模式通过延缓应用在设备长时间待机状态下对于CPU和网络资源的使用来实现节能;而App Standby则是通过延缓最近未被使用的后台应用对于网络的请求来达到同样的目的。

Doze和App Standby在Android6.0及以上的Android设备中可以影响所有运行状态下的Android应用,无论这些应用的Target API是否是指定为API23。为了确保用户获得在不同Android版本下的应用体验一致性,开发者需要对应用在Doze及App Standby模式下做相应的适配。

Doze初体验

用户的Android设备处于未充电状态,静止且屏幕关闭一段时间之后,Android系统就会自动进入Doze模式。在Doze模式下,Android系统将会通过限制后台应用对CPU密集型服务以及网络的使用来减少电量消耗。此外,Android系统还会推迟后台应用的Jobs、Syncs和Alarms等操作。

正常情况下,Android系统会周期性的退出Doze模式然后执行之前推迟的应用活动。Android系统退出Doze模式的这个短暂期被称作“维护窗口”。在这个较短的维护窗口期间,系统将会恢复所有Doze模式中推迟的Syncs、Jobs和Alarms等操作,并短暂开放后台应用对于网络的访问权限。

在这里插入图片描述

Figure 1. Doze模式为应用提供了一个周期性的可供应用使用网络以完成被推迟任务的维护窗口

在维护窗口的末期,Android系统又会重新进入Doze模式,并再度暂停所有的Jobs、Syncs和Alarms等操作的执行。系统会在多次进入和退出Doze模式之后智能调整时间段,最后显著降低退出Doze模式的频率,为长时间处于未充电状态且没有活动的Android设备最大限度保存电量。

在用户通过移动、点亮屏幕或者连接充电器唤醒Android设备之后,系统将会自动退出Doze模式并恢复应用到正常的工作状态。

Doze模式下的限制

Android应用处于Doze模式下时会受到以下限制:
1.网络访问被挂起
2.Wake Locks被无视
3.AlarmManager创建的Alarms将被推迟到下一个维护窗口,通过setAndAllowWhileIdle()以及setExactAndAllowWhileIdle()设置的Alarms将会在Doze模式下正常执行,同时通过setAlarmClock()设置的Alarms也会正常执行—Android系统将会在设定时间之前自动退出Doze模式
4.Android系统将会停止执行Wi-Fi的扫描
5.Android系统将会停止Sync Adapter的同步操作
6.Android系统也会停止JobScheduler的定时操作

### 解决方案 在终端中遇到 `bash` 报错未找到 `spark-shell` 命令的问题,通常是由以下几个原因导致的:环境变量未正确配置、安装路径不正确或权限不足。以下是针对该问题的详细分析与解决方法。 #### 1. 确认 Spark 是否正确安装 如果系统中已经安装了 `pyspark`,可能会导致冲突,尤其是在命令行中运行 `spark-shell` 时。建议先卸载 `pyspark` 并重新检查 Spark 的安装状态[^1]。 ```bash pip uninstall pyspark ``` #### 2. 配置环境变量 确保 Spark 的安装路径已正确添加到系统的环境变量中。如果没有正确配置,系统将无法识别 `spark-shell` 命令。以下是具体操作步骤: - 打开终端并编辑 `.bashrc` 或 `.zshrc` 文件(取决于使用的 Shell 类型)。 - 添加以下内容以设置 `SPARK_HOME` 和 `PATH` 环境变量: ```bash export SPARK_HOME=/path/to/spark # 替换为实际的 Spark 安装路径 export PATH=$SPARK_HOME/bin:$PATH ``` - 保存文件后,运行以下命令使更改生效: ```bash source ~/.bashrc # 或者如果是 zsh source ~/.zshrc ``` #### 3. 检查用户权限 如果 Spark 是由其他用户安装的,当前用户可能没有足够的权限访问相关目录或执行命令。这种情况下,可以尝试切换到正确的用户(如 `hdfs` 用户)来启动 Spark[^2]。 ```bash su hdfs spark-shell ``` #### 4. 确认 Spark 的安装路径 如果上述方法均无效,可能是 Spark 的安装路径不正确或未正确解压。请确认以下几点: - Spark 是否已成功解压到指定目录。 - `spark-shell` 是否存在于 `$SPARK_HOME/bin` 目录下。 如果发现路径错误,可以重新下载并解压 Spark: ```bash wget https://downloads.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz tar -xvzf spark-3.3.0-bin-hadoop3.tgz mv spark-3.3.0-bin-hadoop3 /usr/local/spark ``` #### 5. 测试 Spark 安装 完成以上步骤后,可以通过以下命令测试 Spark 是否正常工作: ```bash spark-shell --version ``` 如果输出 Spark 的版本信息,则说明安装成功。 --- ### 注意事项 - 如果使用的是 Windows 系统,请确保将 Spark 的 `bin` 目录添加到系统的 `PATH` 环境变量中。 - 如果仍然报错,可以检查日志文件(通常位于 `$SPARK_HOME/logs`)以获取更多调试信息。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值