我正在调试问题的Syncthing Android包装器。安卓应用程序将Syncthing项目的本地二进制文件包装起来,并提供一些额外的功能,例如基于连接WiFi、电源等启动/停止。
不幸的是,有关服务在WiFi更改后不再自动启动的问题已经出现,特别是对于已经升级到Android 6的手机。由于我的个人手机最近已经升级到6.0.1,我终于能够调试这个问题了,今天我注意到以下内容:
Syncthing协议在加密、哈希等方面对CPU的要求相当高。因此,似乎由于分叉的本地二进制文件对CPU的高要求而导致服务被强制停止。
应用程序已标记为“无电池优化”,但仍然被杀死。有没有办法防止ActivityManager由于分叉进程的CPU需求而杀死应用程序?
不幸的是,有关服务在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需求而杀死应用程序?
BgDetect
并没有返回任何结果,所以它可能是OxygenOS的一个新增功能。 - Martin C.startForeground()
将服务提升到“前台”可以缓解问题。但我认为这不是最优解决方案。 - Martin C.