在Android ANR对话框中按“关闭应用”,关闭并立即重新启动应用

时间:2018-06-27 11:09:55

标签: android forceclose android-anr-dialog

我面临一个奇怪的问题(我认为)。我的应用很少产生 ANR 。我正在尝试尽可能减少它们,到目前为止,我已经取得了成功。但是,当出现 ANR对话框时,如果我(或任何用户)决定通过按“关闭应用程序”而不是等待以使其响应而决定关闭该应用程序,然后该应用程序关闭,但立即重新启动,显示与显示ANR对话框时相同的活动。

这很麻烦,因为当用户正常启动我的应用时,他/她会经过一定的活动顺序,每个活动都负责执行某些任务,创建一些对象等。但是,当应用自动重新启动并且用户发现自己与显示ANR对话框时处于同一活动中时,该活动序列尚未发生,因此某些事情必填项丢失,因此我的应用程序崩溃了。。可能是某个对象为null,一个int值不正确,某个字符串可能为空等。确切的问题在这里并不重要重要的是,该应用没有经历用户打开时通常执行的一系列活动,而是设置了以后需要进行此活动之前需要的所有那些对象,变量等。

另一方面,如果我的应用程序在任何时候崩溃,我都会有一个UncaughtExceptionHandler,它会以“干净的方式” 关闭我的应用程序。 等效于用户按下“概述”按钮,然后通过按“ x”或向左/向右滑动来关闭应用程序。因此,如果用户想再次使用该应用程序,则他/她将再次启动它,该应用程序将经历其应执行的一系列活动,并且一切都会按预期进行。但是,当出现ANR对话框时,我无法控制按“关闭应用程序”的实际作用...

或者我可以吗?

这是ANR对话框的正确行为吗?还是我在这里遗漏了一些东西?是否有人遇到过这种情况?用户在对话框中选择“关闭应用程序”选项后,有什么方法可以使我的应用程序关闭并保持关闭状态? (我猜不是)。

在此先感谢您,如果我在这里遗漏了一些明显的内容,请尝试保持柔和! :)

3 个答案:

答案 0 :(得分:1)

看看this

基本上,那个家伙想要完成的工作是记录未捕获的错误,就像您在帖子中所说的那样,您无法处理,并利用这些日志来纠正应用程序中的不一致之处。

关闭该应用程序通常会关闭该应用程序,并且不应该重新打开该应用程序,但这完全取决于您的Mobile操作系统中的Dialogs实现,某些OEM会对现有功能进行更改,有时会弄乱它。

您还可以在清单中检查意图过滤器,以检查它们是否以某种方式发生干扰。

答案 1 :(得分:1)

这取决于应用程序中可能出现的“前景”或“持久”方面。 看看AppErrors.java

handleAppCrashLocked()在终止进程之前被调用-您可以看到此处定义的条件,在这种情况下,活动/服务将重新启动。检查这是否适用于您。

第二,如果您不使用AOSP,则无法修改用于重新启动应用程序的重新启动意图。因此,您唯一的选择是检测到这是崩溃恢复并启动适当的屏幕。通过崩溃恢复与常规启动启动应用程序时,您会获得不同的意图。

如果您正在使用AOSP,则可以遵循AppErrors.java的线索

答案 2 :(得分:0)

我喜欢这里的链接(https://mobikul.com/auto-restart-application-crashforce-close-android/)。 这就是说如何自动重启强制关闭的应用程序。他们提供了一种方法来处理try catch块中未捕获的这些错误。实际上,我还没有实现它,因为我无法生成ANR对话框。 :-(

希望有帮助!