【问题标题】:Is there a method inside android to know when the system is going to kill my app?android内部是否有一种方法可以知道系统何时会杀死我的应用程序?
【发布时间】:2016-02-12 14:05:09
【问题描述】:

我们有一个很难重现的应用问题。用例如下:

  • 用户打开应用
  • 用户在后台离开应用程序
  • 用户打开了 5 到 7 个应用程序
  • 系统杀死了我们的应用程序
  • 当用户尝试恢复应用时,应用由于NullPointerException而崩溃

我试图通过Application 类方法onTrimMemory()onLowMemory() 使用控制台日志,但没有调用此方法。有没有什么方法或回调我可以听知道什么时候android系统会因为打开更多的应用程序而杀死我的应用程序,在这种情况下让我做点什么?

【问题讨论】:

  • 尝试在活动代码中覆盖这些方法,而不是应用程序的代码
  • 您是否在清单中正确声明了您的 Appliction 类?
  • 据我所知,这是不可能的直接方式(我很高兴被反驳,因为我也曾寻找过这种方式)。以一种间接的方式,您可以实现某种保活信号。使用它来使您的应用程序看起来仍然需要(因此其他空闲的后台应用程序将在您的应用程序之前被杀死)或检查上次保持活动信号的时间戳以查看应用程序在达到此检查之前已经死机(导致重新创建所有必要的部分)。
  • 看起来不错,但从我刚刚阅读的内容来看,这可能无法解决您的问题。也许这会给你一个答案stackoverflow.com/questions/21040339/…
  • "要保存有关活动状态的其他数据,您必须重写 onSaveInstanceState()" 来源:developer.android.com/training/basics/activity-lifecycle/…

标签: android android-activity android-service android-memory


【解决方案1】:

您可以在 onSaveInstanceState() 中保存所需的任何状态,并在 onRestoreInstanceState() 中恢复它们。 onDestroy() 是您的应用程序在后台时系统最常调用以清理空间的方法,但不保证会调用它,因此最好将您的状态保存在 onSaveInstanceState() 中。

【讨论】:

    【解决方案2】:

    有什么方法或回调我可以听知道什么时候android系统会因为打开更多的应用程序而杀死我的应用程序,在这种情况下让我做点什么?

    不是真的。视情况而定,onDestroy() 的正在运行的活动和服务会被调用。

    我们有一个很难重现的应用问题

    这应该可以在几秒钟内重现:

    1. 运行您的应用程序。

    2. 切换到另一个应用程序。

    3. 从 IDE 中终止应用进程(例如,“Android 监视器”工具窗口中的“终止应用程序”工具栏按钮)。

    4. 尝试从概览屏幕(也称为最近任务列表)返回您的应用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2021-11-24
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多