【问题标题】:Make AsyncTask (or a service) unkillable (or something approaching it)使 AsyncTask (或服务)无法杀死(或接近它的东西)
【发布时间】:2012-11-21 02:08:27
【问题描述】:

在我的应用程序中有一个在后台运行很长时间的 AsyncTask。问题是,在内存不足的情况下,它会被 VM 杀死,有没有办法让应用程序的优先级更高,从而更难杀死它?我应该改用服务吗?我唯一的目标是让它难以杀死,任何建议或指导将不胜感激,谢谢。

【问题讨论】:

  • 你在做什么这么耗费资源?你能把每个请求分解成更小的请求吗?

标签: java android service kill dalvik


【解决方案1】:

我建议您将其设为服务并使用startForeground(),这将使其更具抵抗力。但即便如此,它也可能会因内存不足而停止。

【讨论】:

  • 感谢您的快速回复,您能解释一下为什么您的解决方案会比 AsyncTask 更好吗?
  • 如果你的主服务是资源密集型的,你可能还想实现一个简单的、轻量级的服务,它只检测主服务并根据需要重新启动它。这个想法是轻量级服务不太可能被杀死。从理论上讲,它应该会更好地工作,但您需要对其进行测试以了解它在实践中的工作方式。
【解决方案2】:

不,没有,否则每个人都会滥用它。如果操作系统杀死了您的服务,那么它就是有原因的。如果条件允许并且您的服务符合条件,如果 Android 认为它应该这样做,它将重新启动它。

【讨论】:

    【解决方案3】:

    如果您的服务被终止,则系统会在资源允许时立即重新启动它。

    所以,让它成为一个服务(它不应该是一个前台服务,如果它不做任何面向用户的事情,比如播放音乐),而是一个可以保存其状态的服务(onMemoryLow() 和 @987654322 @ 方法)。因此,在重新启动后,它可以恢复其进程,而用户并不聪明。

    【讨论】:

    • 谢谢j0ntech,我可能会采纳你的建议。
    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 2014-09-09
    • 2016-03-07
    • 1970-01-01
    • 2018-03-18
    • 2016-09-22
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多