当前,我们面临Android Vital报告中的“ 网络使用率过高(背景)”。最近的 30天为0.04%,但我们优于9%
因为只有好于9%看起来才是可怕的事情。我们决定认真研究这个问题。
该应用程序是一个笔记应用程序(https://play.google.com/store/apps/details?id=com.yocto.wenote),它提供了一项可选功能-在应用程序关闭后同步到后台的云中。
这是我们在后台执行到云同步的方式。
WorkManager
。onPause
中,调度OneTimeWorkRequest
,约束为NetworkType.CONNECTED
。该工作人员计划延迟8秒钟开始。BackoffPolicy.LINEAR
重试,延迟时间为1.5小时。我们仅有的信息是https://developer.android.com/topic/performance/vitals/bg-network-usage。
当应用在后台连接到移动网络时,该应用 唤醒CPU并打开无线电。反复这样做可以运行 降低设备电池的电量。应用被认为正在 如果它位于PROCESS_STATE_BACKGROUND或 PROCESS_STATE_CACHED状态。 ... ... ... Android生命体认为,当 应用每小时发送和接收总计50 MB的数据,而 在0.1%的电池会话中在后台运行。
Application
的{{1}}之后8秒钟开始后台同步作业。在此期间,应用在onPause
/ PROCESS_STATE_BACKGROUND
内部还是外部?我们如何避免在PROCESS_STATE_CACHED
/ PROCESS_STATE_BACKGROUND
内部运行?我的问题是
答案 0 :(得分:5)
对于第一个问题,在以下情况下会触发“网络使用率过高(背景)”:
...一个应用程序在后台运行时,每小时发送和接收总计50 MB的内存,占电池会话的0.10%。电池会话是指两次充满电之间的间隔。
要确定是什么原因造成的,请尝试使用Battery Historian分析应用随着时间的消耗情况。对于我们来说,它有助于确定我们不打算引入的重复唤醒锁。
以下是输出示例,向我们展示了过多的BLE扫描会严重影响电池:
对于第二个问题,如您正确识别的那样,WorkManager可能是您追求的目标。这使您可以计划任务以及希望其发生的窗口。使用此功能,操作系统可以为您以及其他应用程序的作业优化任务计划。例如,可以将6个应用程序安排为同时执行所有6个应用程序,而不是每10分钟将其唤醒一次,而不是每10分钟将设备唤醒一次,从而增加了在打ze模式下花费的时间。
请注意,上面的屏幕截图包含“ JobScheduler作业”标签。运行分析后,您将能够看到您的工作实际如何执行:
我以前使用Firebase JobDispatcher取得了很大的成功(tutorial I wrote),它扩展了OS的JobScheduler API,并且最终很相似。
我看到您现在正在使用WorkManager(Jetpack的JobDispatcher版本),但是在8秒钟内,操作系统没有机会优化您的工作。是否有能力在最少几秒钟的时间内安排它们,并尽可能最大地安排它们?
但是,您当前的任务计划设置可能不是根本原因。以下是一些其他想法,可能会为您提供所需的电池改进。在您运行Battery Historian并确定了根本原因之后,它们的用途将变得更加清楚:
请考虑是否仅wifi上网是可行的数据同步默认/选项。您会遇到更好的电池使用情况,更少的网络问题以及可能更好的客户满意度。
笔记应用程序为什么需要同步几个数百 MB?您是否可以只同步已更改的笔记,而不是每次都同步整个笔记列表?