【问题标题】:Value of Application Context Variables Lost on Application Error应用程序错误丢失的应用程序上下文变量的值
【发布时间】:2011-09-01 13:27:06
【问题描述】:

我注意到,当我的应用程序遇到错误时,我的应用程序上下文变量的值也会重新初始化为其原始值(而不是更新后的值)。据我了解,这是因为重新创建了应用程序。

发生应用程序错误时,如何保存和恢复应用程序上下文变量的值?如果您能更详细地解释我的应用程序遇到错误时后台的工作情况,我也会很高兴。

注意:我读到解决方案之一是使用 SharedPreferences。然而,SharedPreferences 会在应用程序死机时保存数据。我不想在应用程序死机时保存数据。我只想在应用程序处于活动状态或后台时保存数据。

【问题讨论】:

  • 您是指导致崩溃的应用程序错误,还是您正在捕获的错误?我对正在发生的事情感到有些困惑,您的应用程序是崩溃并丢失数据还是究竟发生了什么?
  • 我指的是导致崩溃的应用程序错误。该错误来自未处理的异常。是的,我的应用程序崩溃了,当它恢复时,数据已经丢失。 (应用程序在崩溃后会自动重新创建。)

标签: android memory


【解决方案1】:

发生应用程序错误时如何保存和恢复应用程序上下文变量的值?

首先,不要有未处理的异常。

其次,不要依赖静态数据成员或自定义Application 子类实例。在许多情况下,您的进程将被终止并且这些值消失。它们应该用于持久内容的内存缓存,仅此而已。

有时,未处理的异常确实出乎意料,但这些异常应该很少发生,并且通常与特定设备相关联(例如,存储空间不足)。其他一切都代表您的应用程序中的错误,您必须修复错误。

【讨论】:

  • 没错,不要试图修复您的应用程序以保存值来为未处理的异常做准备,修复未处理的异常:)。
  • @CommonsWare:谢谢!我会记住这一点。但是,正如您所说,有时未处理的异常确实是出乎意料的。您能否建议一种方法,以便我可以保留全局变量,从而避免丢失数据?另外,根据您在第 2 段中所说的内容,这是否意味着来自自定义 Application 子类实例的变量确实应该以这种方式运行(当进程意外终止时丢失它们的数据)并且我无能为力是吗?
  • @Arci:“你能建议一种方法,以便我可以保留全局变量,从而避免丢失数据吗?” - 不。全局变量将用于持久数据的缓存。 “我对此无能为力吗?” - 当然。这是曾经创建的每个操作系统中每个程序的行为,AFAIK。如果你的应用崩溃了,你的记忆就会“噗”的一声。
  • @Jack:是的,我会捕获未处理的异常。但我也想确保当我的应用程序突然遇到意外错误时不会丢失任何数据。
  • @CommonsWare:感谢您向我解释清楚。但我只是想知道为什么我的活动即使在遇到错误后仍被重新创建?当我的应用程序遇到错误时,它会显示一个对话框,要求我强制关闭活动。当我单击强制关闭按钮时,我的应用程序被重新创建(不询问我),并且我以前的活动显示为减去丢失的数据。我想如果我在发生错误后强制关闭我的应用程序,它不应该重新创建,因为我已经关闭了它?
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 2012-06-27
  • 2019-10-28
  • 2015-01-11
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多