进程在 Marshmallow 上被杀死,但在 Lollipop 上没有被杀死

问题描述 投票:0回答:3

有一个现有的应用程序(几年前)在设备启动时启动。 在 Lollipop 上一切正常,但在 Marshmallow 上,应用程序启动后大约 10 或 20 秒左右,进程就会被终止。 logcat 中没有任何迹象表明存在任何异常,进程被终止时唯一记录的是这一行:

“I/ActivityManager:杀死3100:com.company.E/u0a85(adj 15):空#17”

知道“空#17”可能意味着什么(如果它有什么重要意义的话)。或者有什么建议我可以找出它被杀的原因吗?

android android-6.0-marshmallow
3个回答
14
投票

就像@CommonsWare评论的那样,这意味着您的进程没有正在运行的组件。 ActivityManager 将保留空进程以加快将来的启动速度,但只有“有限数量”——设备上的默认 32/2 = 16。你的应用程序是#17,所以它被杀死了 空置时间超过 30 分钟

的应用程序的最大数量也有(下)限制。但这会给你一个原因字符串“empty for

X s”,而不是“empty #X”。 这不是 Marshmallow 中的新功能。不知道为什么你以前没有经历过。也许你有,但你没有注意到。也许事情发生得太晚了,你有时间完成你的工作。或者您的设备的 Lollipop/Marshmallow 版本可能在某些方面有所不同(例如,启动时启动并变空的进程数量增加,或者 ProcessList.java 中的限制配置不同?)。

无论如何,如果没有活动组件,就不能依赖进程保持活动状态。为您的工作启动一个服务——并确保在完成后停止它。

框架可以随时取消同步。例如,未同步的同步 * 用户发起且持续时间超过30分钟将被视为超时并取消。 * 同样,框架将尝试确定适配器是否正在取得进展 * 通过在一分钟内监控其网络活动。如果网络流量超过此 * 窗口足够接近零,同步将被取消。

0
投票
这是

棉花糖

的新变化。 您可以使用 Lollipop 代码验证它

这里

$ adb logcat -s termux:* ---------系统开始 --------- 主程序开始 11-12 19:33:08.495 10219 10219 I termux : 启动时执行的文件: 001-start-sshd, 002-start-test-server

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.