我们注意到我们的后台应用程序在不同供应商的设备上表现不同。基本上,当应用程序处于前台状态时,一切都运行良好,我们的处理每帧大约需要 15-50ms,因此系统响应非常灵敏,但在用户将我们的应用程序移至后台状态后不久,我们就开始处理过程中出现延迟,开始花费更多时间(每帧高达 600 - 800 毫秒)
那么问题是,我们可以做些什么来提高三星的后台性能吗? 也许会被优先考虑或被列入白名单,或者不会被推送到低级 CPU。
我们开发了一个小应用程序来调查这个问题。
以下是想要尝试的链接:https://drive.google.com/file/d/1DVJ9F3jDEW5AO8CSA_8znRupiQiBB10M/view
这个应用程序有前台服务、唤醒锁和一个简单的“重”操作,基本上可以做到这一点:
private var array = DoubleArray(100) { 0.0 }
while (i < 1_000_000) {
array[abs(k % count)] = Random.nextDouble() * i
i++
k++
}
经过一些测试后,我们得到的结果与我们在应用程序中得到的结果很熟悉。
在搭载 Android 12 的三星设备 (Samsung S22) 上,前台处理时间很快且几乎恒定 (160-180ms),但大约 10 秒后,当应用程序处于后台时,处理时间急剧上升至1100-1120ms,与 Pixel 6 相比,前景为180-190ms,背景为300-350ms。因此,Samsung 上的处理时间增加了 5 倍,而 Pixel 上的处理时间则增加了约 2 倍甚至更少。除此之外,我们还看到该应用程序在后台被推送到低性能 CPU,然后返回前台,但在 Pixel 设备上,该应用程序从未被推送到较低的第 4 个 CPU。所有测试都是在没有其他活动应用程序与我们并行运行的设备上进行的。
下面是示例应用程序的分析器屏幕截图,显示了它在 Pixel(1 张图片)和 Samsung(2 张图片)上的行为有何不同:
您找到问题的解决方案了吗?我目前在使用三星设备时也遇到了同样的延迟