【问题标题】:Save state when system closes application on low memory系统关闭内存不足的应用程序时保存状态
【发布时间】:2012-10-22 09:33:02
【问题描述】:

是否可以拦截系统在内存不足时关闭我的应用程序的事件?我知道有一个方法“onLowMemory”,但这并不意味着我的应用程序在调用后会被关闭。

我的问题是我正在共同开发一个使用大量静态数据的应用程序(我知道应该避免这种情况,但这不是我的决定,目前几乎不可能改变这一事实)。如果我按下主页并且不返回此应用程序,例如。 10 小时后它可能会强制关闭,因为静态数据不再存在(应用程序被系统杀死)。

是否有可能知道应用程序何时将被系统杀死?当我重新创建我的应用程序时,我会将静态数据存储在某个地方以便稍后获取它。有哪些可能的解决方案?

也许,如果无法连接到这样的事件,我可以创建一个每隔几分钟保存一次状态的服务,所以当应用程序被杀死时,我可能会有最新的静态数据?

你遇到过这个问题吗?您有什么解决方案/建议?

【问题讨论】:

  • 如果数据在 10 小时后不再存在,可能是因为您的应用程序已被终止。在这种情况下,您将不得不加载数据。如果它强制关闭,它不会总是强制关闭,因为当应用程序第一次启动时,数据不存在。 onLowMemory() 是最好的尝试。还有onTrimMemory(),它可以为您提供剩余的内存级别。很抱歉,这是一个非常模糊的问题,我认为在操作系统中可能存在对进程、内存和状态如何工作/与您的应用相关的误解
  • @GregGiacovelli 我知道这是因为我的应用程序被杀死了。强制关闭与应用程序无法加载此静态数据有关(所有引用均为空等)。我只是希望找到保存数据的最佳时机(就在内存不足 - 被操作系统杀死之前)。

标签: android static heap-memory system kill


【解决方案1】:

您的应用会在后台对这些静态数据执行任何操作吗?您可以将所有内容保存在onPause() 中。一旦调用了onPause,您的应用就可以在任何时候被终止而无需任何进一步的回调,所以如果需要保存某些内容,onPause 就是这样做的地方。

【讨论】:

  • ... 或类似的东西。即使您无法更改架构,最好对其进行一些更改以确保可靠地保存您的数据。在更改时保存数据,一些事务性或幂等更改等可能是更好的选择。否则,您仍有可能丢失数据。
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2013-05-11
相关资源
最近更新 更多