引言与结论

起因是当我的电脑和手机同时登录微信时,手机收到消息的推送提醒总是比电脑慢大概几秒到几分钟不等,有时电脑接了微信电话,等聊了一段时间挂断后,手机才响起微信电话的提示.奇怪的是QQ并没有这个问题.

显然延迟问题原因应该在推送上,我的微信是Google Play版本,推送走FCM,所以我首先怀疑FCM存在问题,因为QQ不走FCM所以推送正常(应用是否走FCM目前我只知道黑域或叫Brevent会显示),查询了一番后发现微信的FCM是残废,FCM是用来拉起微信进程的而不是推送消息的,还是需要微信常驻后台才能保证推送提醒的实时性.但是我的微信也确实是Unrestricted状态,为什么还是延迟呢.

查到的民间解决方案是:

在连接Wifi时确实延迟,可以强制微信使用移动数据

这个情况我没进行验证,但确实微信会经常放弃使用WiFi而使用移动数据即使在有WiFi网络连接的情况下.我更关心的是,除了微信,还有那么多走FCM的Apps,那么FCM有在正常工作吗?

经过简单的测试,结论是:

  • 国行ROM的三星手机(One UI)屏蔽了FCM,只有在翻墙时,FCM工作正常.
  • 使用FCM推送的Apps只有在开启了自启动(即电池策略为Optimized(优化)Unrestricted(无限制))且系统已翻墙的情况下才能正常推送.

在测试FCM连通性的过程中,我发现了Android 12 电池优化策略对FCM的影响,进而又测试了应用的

  • Auto run apps(自启动)
  • Unrestricted(无限制)
  • Optimized(优化)
  • Restricted(限制)
  • Deep sleeping(休眠)
  • Can be hibernated(可被休眠)

的关系,其中最后的可被休眠状态是我自创的,因为系统中对于这种状态没有一个很好的描述,但是它是确实存在的一种状态.

电池优化策略的关系结论如图所示:

下文详解测试FCM和如何调出Android 11 上的优化列表以批量查看和设置Optimized(优化)Unrestricted(无限制).

Ps:
一个app是否应该自启动看是否需要收到及时的推送.
一个app是否应该休眠看是否需要保持这个app更新.

在哪里设置这些应用状态

本文使用的手机是运行大陆ROM的三星S21 Ultra,One UI 版本4.1,Android 版本12.

Auto run apps(自启动)

Turn off Auto run to stop apps from running automatically. This will improve your device's performance. Apps running in the background may also be stopped automatically if they are not used for some time.

Auto run apps(自启动)可以在以下位置找到:

  1. Settings->搜索:auto run
  2. 打开Smart Manager->下方Utilities->App management->右上角🚀按钮->Auto run apps
  3. Settings->General management->Battery->Background usage limits->Auto run apps

  • 自动运行包含优化和无限制,只要自动运行打开,这个app一定会被变成这两种状态之一,具体默认变成哪种系统决定,应该是有个白名单,微信会变成无限制,fcm toolbox会变成优化,但是具体到app可以自己调成优化
  • 关闭自动运行一定会变成限制级,限制级不一定会休眠(可以被休眠)
  • 一个app在优化和无限制之间切换,不影响自动运行的开关(都是开)
  • 自动运行的app不会显示在可以被休眠的菜单里(只有非自动运行的app可以被休眠)

Deep sleeping(休眠)

Deep sleeping apps will never run in the background and may not receive updates or notifications. They'll only work when you open them.

Deep sleeping(休眠)可以在以下位置找到:

  1. Settings->搜索:sleep->Deep sleeping apps
  2. Settings->General management->Battery->Background usage limits->Deep sleeping apps
  3. 打开Smart Manager->Battery->Background usage limits->Deep sleeping apps

其中右上角+按钮便是我称作Can be hibernated(可被休眠)的状态.

休眠的app最明显的缺点是收不到Goolge Play更新,可以用Aurora Store检查检查更新然后到Google Play更新(每个app详细页面右上角菜单中有按钮可以直达该app在Google Play中的页面)

三种电池优化状态

Unrestricted(无限制)
Allow this app to use battery in the background without restrictions . This may reduce your battery life .
Optimized(优化)
Optimize based on your usage of this app . Recommended for most apps .
Restricted(限制)
Restrict battery usage while this app is running in the background . The app may not work as expected and notifications may be delayed .

三种电池优化状态可以在以下位置找到:

  1. Settings->Apps->选择一个要设置的app进入该app的App info->Battery->Use details
  2. 在主屏幕长按app->->App info->Battery->Use details
  3. 在后台app列表中点击app图标->App info->Battery->Use details

对每一个app单独设置过于麻烦,如何一览优化和没优化的app列表详见下章节.

调出优化电池使用量

在Android 11时,Optimize battery usage(优化电池使用量)Special access(特殊权限)下,但是在Android 12中对用户隐藏了,想显示这个列表需要能启动系统应用工具(创建快捷方式类工具).

使用Activity Launcher(活动启动器)|免费

在Google Play下载Activity Launcher,免费.(酷安也有许多同类应用)
搜索optimize并点Settings下面的第一个Settings$HighPowerApplicationsActivity即可,也可该项右侧菜单创建一个快捷方式.

使用Tasker|付费

在Google Play下载Tasker,价格US$3.49.
TASKS栏中点新建+(弹窗点Creat)

输入任务名字如Optimize battery usage,然后点右侧对号
点右下角新建+,然后点App,点Launch app

长按Settings,找到并点击Settings$HighPowerApplicationsActivity

已完成,点左上角返回,点左下角运行即可.

FCM运行状态

在Google Play下载谷歌的电话app,如果使用三星的电话拨号器会无法识别代码.
需要暂时允许它成为默认拨号应用
拨号盘输入*#*#426#*#*
连接成功和失败的情况分别如下图,FCM默认Heartbeat 15分钟.


点击Events和右上角的Advanced view可以查看链接细节和日志.

FCM ToolBox测试FCM

测试结论是:App只在Auto run自启动状态才会在后台推送.

如何测试FCM是否在工作呢.
在Google Play下载FCM toolbox或通过Github版本下载.
Github: SimonMarquis / FCM-toolbox

This public toolbox allows you to easily test and debug Google's Firebase Cloud Messaging service.

  • Send and receive FCM payloads
  • Manage registered devices
  • Self-hosting capabilities

On the public toolbox versions, users share the same FCM and FRD instances, be responsible!
The GitHub project is located at https://github.com/SimonMarquis/FCM-toolbox

装好后PC访问https://simonmarquis.github.io/FCM-toolbox/#send-ping
保持手机亮屏,在网页中点开搜索按钮的下拉栏可以看到下面自己的设备了,点击自己的设备即可,然后可以send发送一个ping类型的消息,此时手机应该马上推送提醒,还可以测试其他类型的推送如Text等.



至此测试成功,可以继续测试其他类型消息和FCM toolbox在后台的接受推送情况.

THE END
最后修改:2022 年 05 月 07 日 21 : 22
本文链接:https://www.j000e.com/Android/Android_battery_optimization-fcm_working_conditions.html
版权声明:本文『理解安卓应用的自启动/电池优化/休眠关系与FCM在大陆的运行条件实测』为『Joe』原创。著作权归作者所有。
转载说明:理解安卓应用的自启动/电池优化/休眠关系与FCM在大陆的运行条件实测 || Joe's Blog』转载许可类型见文末右下角标识。允许规范转载时,转载文章需注明原文出处及地址。
Last modification:May 7, 2022