【问题标题】:Process being killed on Marshmallow but not on Lollipop进程在 Marshmallow 上被杀死,但在 Lollipop 上没有
【发布时间】:2015-10-25 21:24:03
【问题描述】:

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

“I/ActivityManager﹕Killing 3100:com.company.E/u0a85 (adj 15): empty #17”

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

【问题讨论】:

  • "Empty",对于一个进程,通常表示没有运行的组件:没有创建活动也没有销毁,没有启动服务也没有停止,没有接收者在onReceive() 等中间。不过,我不一定知道这是否是特定 LogCat 条目中“空”的含义。

标签: android android-6.0-marshmallow


【解决方案1】:

就像@CommonsWare 评论的那样,这意味着您的进程没有正在运行的组件。 ActivityManager 将保留空进程以加快未来的启动速度,但仅限a limited number of them - 您设备上的默认 32/2 = 16。你的应用是#17,so it is killed

apps that have been empty for more than 30 minutes 的最大数量也有(下)限制。但这会给你一个“empty for X s”的原因字符串,而不是“empty #X”。

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

无论如何,如果您没有活动组件,您就不能依靠您的流程保持活力。为您的工作启动一项服务 - 并确保在完成后停止它。

【讨论】:

    【解决方案2】:

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

    这是Marshmallow 的新变化。 您可以使用棒棒糖代码here 进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2012-05-18
      • 2019-05-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多