【问题标题】:Good practice for app that times when it crashes应用程序崩溃时的良好做法
【发布时间】:2012-08-17 21:55:23
【问题描述】:

我的应用目前没有崩溃,但我们正在努力让它变得非常健壮,我们正在做的一件事是跟踪“某些事件”的时间,直到它被用户手动停止。

我的预期实现

这就是我计划实施的方式。我打算这样做,所以当他们提交初始“事件”时,它开始计时并在我们的 SQLite 数据库中启动初始时间和事件的其余部分。然后在同一个提交屏幕上会出现一个按钮,用于停止对事件进行计时。我们希望对事件进行准确的时间跟踪。我会在首选项中设置一个标志,表示有一个正在进行的事件和另一个具有唯一 ID 的首选项。

关注

所以我担心的是:如果应用程序崩溃或发生了不好的事情,我想给这个人一个选项来更改事件的结束时间。 我打算通过以下两种方式之一来做到这一点: 1.检查应用程序何时再次启动(如果有办法这样做),询问标志是否仍然设置,以及应用程序是否刚刚启动。然后给他们这个选项进行编辑。 2. 如果存在,调用onTerminate 方法或android 在关闭时使用的something,即使它崩溃了。再说一次,我不知道这是否存在。

有什么建议吗?

【问题讨论】:

  • 听起来您正在寻找用户持久数据。 :) stackoverflow.com/a/3310108/940834
  • 对不起,这不是我要问的,但谢谢!我已经使用了持久数据,我的问题是更多我可以找出应用程序是否刚刚打开?因为我有很多视图,所以经常调用 onCreate,通常不是在应用程序第一次打开时调用。其次,我想知道是否有一个总是在 android 上调用的方法,无论它是关闭还是崩溃。在我看来,它会被称为 onTerminate 或 onCrash 之类的。
  • 再次澄清,我很放心我的数据是安全的,我一点也不担心它的存储。
  • @jQwierdy,Doomsknight- 我认为 Doomsknight 想说的是,您将使用持久数据来存储应用程序刚刚打开或成功关闭。如果您打开您的应用并且持久性数据显示该应用已经打开,那么您就遇到了崩溃。
  • 如果您在市场上发布了您的应用,我相信 Android 会自行向您发送这些统计信息(只要用户在 ANR/崩溃对话框弹出时点击“发送报告”).. . 至少从 Froyo 开始,Android 2.2。

标签: android robustness


【解决方案1】:

发出带有广播状态的 sendStickyBroadcast(Intent)。在以后的任何时候为粘性广播注册一个空接收器,您将拥有最后一个已知的广播状态。跌倒也没关系。因此,您可能会在启动时进行一次广播等。

当应用再次启动时,当然是 ON_BOOT_COMPLETED 意图广播,您将要收听它。

也不要指望 Android 在崩溃时调用任何特定方法。

一般原则是这样的:如果有重要的东西要保存(包括状态),请立即执行,例如发出 stickyBroadcast 或存储为 SharedPreference。不要等待任何特定的回调或崩溃事件处理。通过立即保存状态信息并处理 ON_BOOT_COMPLETE 或检查 SharedPreferences 中的第一个启动值是否无法处理任何事情。这实际上与校验和没有什么不同。开始您的活动是消息的开始。你也应该有一个消息结束。或事件事件的结束。如果你没有看到它,你就没有成功。只需经常发出最后一个状态,并相应地恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多