【发布时间】:2018-12-06 06:15:26
【问题描述】:
我正面临一个奇怪的(在我看来)问题。我的应用很少产生 ANR。我试图尽可能减少它们,到目前为止我已经成功了。但是,当 ANR 对话框确实出现时,如果我(或任何用户)决定通过按 “关闭应用程序”而不是等待来关闭应用程序以使其响应,然后应用关闭,但立即重新启动,显示与显示 ANR 对话框时相同的活动。
这麻烦,因为当用户正常启动我的应用程序时,他/她会经历一定的活动序列,每个活动都负责执行一些任务,创建一些对象等。但是,当应用程序自动重新启动并且用户发现自己处于与显示 ANR 对话框时相同的活动中时,这一系列活动并没有发生,所以某些事情required 丢失,因此我的应用程序崩溃。可能是一个对象为空,一个 int 的值不正确,一些字符串可能为空等等。确切的问题在这里并不重要。 重要的是,应用程序没有完成用户打开时通常执行的一系列活动,设置所有这些对象、变量等,这些对象、变量等稍后在到达此活动之前需要。
另一方面,如果我的应用程序在任何时候崩溃,我有一个 UncaughtExceptionHandler 会以 “干净的方式” 关闭我的应用程序。 相当于用户按下“概览”按钮,然后通过按下“x”或向左/向右滑动来关闭应用程序。因此,如果用户想再次使用该应用程序,他/她将再次启动它,该应用程序将完成它应该执行的一系列活动,并且一切都按预期工作。但是,当出现 ANR 对话框时,我无法控制按“关闭应用程序”实际执行的操作...
或者我可以吗?
这是 ANR 对话框的正确行为还是我在这里遗漏了什么?有其他人经历过这种情况吗?用户在对话框中选择“关闭应用程序”选项后,有什么方法可以关闭我的应用程序并保持关闭状态? (我猜不是)。
提前谢谢你,如果我在这里遗漏了一些明显的东西,请尽量温柔! :)
【问题讨论】:
-
我不会温柔的大声笑花时间删除所有的 ANR,你的应用程序会更好。您可以做的另一件事是放入一些日志并在它开始时检查 logcat,以查看它在 ANR 之后如何启动。如果它不是你想要的,那么只需根据你所看到的来修复它 - 如果某些东西不应该是空的,那么做一个检查,如果它是空的,那么重新创建,所以它不是。这并不难,只是需要时间和思考,也许还有一些压力。
-
@CmosBattery 我不会反对你所说的任何事情。它可能被证明是唯一可行的解决方案。但是,我想知道关闭并立即重新启动应用程序是否应该在 ANR 对话框中按“关闭应用程序”。
标签: android forceclose android-anr-dialog