10

我正在调试Syncthing Android包装器的问题。Android 应用程序包装了 Syncthing 项目的原生二进制文件,并提供了一些附加功能,例如基于连接 WiFi、电源等的启动/停止。

不幸的是,该服务不再在 WiFi 更改时自动启动的问题出现了,尤其是升级到 Android 6 的手机。由于我的个人手机最近升级到 6.0.1,我终于能够调试到问题,今天我注意到以下内容:

07-06 20:52:26.562  1181  1363 I ActivityManager: [BgDetect]chkExcessCpu doKills: true uptime: 300309
07-06 20:52:26.960  1181  1363 I ActivityManager: [BgDetect]detect excessive cpu on forked process libsyncthing.so(pid : 2758) plan to stop it 371060 during 300309
07-06 20:52:26.960  1181  1363 I ActivityManager: [BgDetect]force stop com.nutomic.syncthingandroid.debug (uid 10132)
07-06 20:52:26.965  1181  1363 I ActivityManager: Force stopping com.nutomic.syncthingandroid.debug appid=10132 user=0: from pid 1181
07-06 20:52:26.966  1181  1363 I ActivityManager: Killing 1360:com.nutomic.syncthingandroid.debug/u0a132 (adj 15): stop com.nutomic.syncthingandroid.debug
07-06 20:52:26.968  1181  1363 W ActivityManager: Scheduling restart of crashed service com.nutomic.syncthingandroid.debug/com.nutomic.syncthingandroid.syncthing.SyncthingService in 1000ms
07-06 20:52:26.968  1181  1354 V ActivityManager: killProcessGroupAsync took 1 ms for PID 1360 on thread 14
07-06 20:52:26.971  1181  6410 I libprocessgroup: Killing pid 2758 in uid 10132 as part of process group 1360
07-06 20:52:26.973  1181  6410 I libprocessgroup: Killing pid 2758 in uid 10132 as part of process group 1360
07-06 20:52:26.974  1181  1363 I ActivityManager:   Force stopping service ServiceRecord{47304c8 u0 com.nutomic.syncthingandroid.debug/com.nutomic.syncthingandroid.syncthing.SyncthingService}

Syncthing 协议在 CPU 方面非常繁重,涉及加密、散列等。因此,由于分叉的本机二进制文件对 CPU 的高需求,该服务似乎被强制停止。

该应用程序已被标记为“无电池优化”,但它仍然被杀死。有没有办法防止ActivityManager由于分叉进程的 CPU 需求而杀死应用程序?

4

2 回答 2

3

不幸的是,这是一个 OnePlus / OxygenOS 功能,它将根据谁知道什么规则杀死任何后台进程,以提供更好的电池寿命外观。

目前,我在GitHub 问题中发现了一个非代码解决方法,它似乎有帮助,但远非理想:在最近屏幕上锁定/锁定应用程序

于 2018-08-07T22:07:45.870 回答
0

正在测试我的前台服务,并意识到这是一个主要是 CPU 的性能问题。所以我使用分析器强制执行性能并添加到白名单中。

减少了 CPU、内存和电池的消耗并完成了。

前台通知服务不能在一加设备中运行

于 2019-05-18T09:42:39.530 回答