// here you can report the throwable exception to Sentry or Crashlytics or whatever crash reporting service you're using, otherwise you may set the throwable variable to _ if it'll remain unused
val intent =Intent(this,MainActivity::class.java).apply {
setMessage("Something went wrong.\nWe'll work on fixing it.")
setPositiveButton("OK"){ _, _ ->}
}.show()
}
}
字符串 我们称之为过程。(Process.myPid())和exitProcess(2),因为如果我们看看Android的开源代码,that's actually the default and proper handling that gets called by Thread. getDefaultUncaughtExceptionHandler(),它会导致我们的应用程序崩溃,并引发臭名昭著的ANR对话框,我们希望通过遵循原始实现而不是在uncaughtException()结束时做任何时髦的事情来成为好的Android公民,比如根本不崩溃或显示另一个活动(永远不要这样做)。 请注意,Kotlin的exitProcess()方法只是Java的System.exit()的 Package 器,无论您在构造函数中传递什么状态代码都无关紧要,我在代码中将其设置为2。 请注意,在Intent中,我们将一个布尔标志“isCrashed”设置为true,我们将使用它来检测是否有意外异常导致应用重新启动,并相应地向用户显示一个对话框,通知他们崩溃。 showUncaughtExceptionDialog()扩展函数是可选的,但是如果由于崩溃而要重新启动应用程序,最好通知用户。
8条答案
按热度按时间vfwfrxfs1#
要做到这一点,你必须做两件事:
1.避免“强制关闭”-应用程序崩溃的标准方式。
1.设置一个重新启动机制,当崩溃发生时,无论如何。
下面看看如何做到这一点:
1.调用
Thread.setDefaultUncaughtExceptionHandler()
以捕获所有未捕获的异常,在这种情况下,将调用uncaughtException()
方法。“强制关闭”不会出现,应用程序将没有响应,这不是一件好事。为了在应用程序崩溃时重新启动应用程序,您应该执行以下操作:1.在
onCreate
方法中,在主Activity中初始化PendingIntent
成员:字符串
然后将以下内容放入
uncaughtException()
方法中:型
您还必须调用
System.exit()
,否则将无法工作。这样您的应用程序将在2秒后重新启动。最后,你可以在Intent中设置一些标志,表明应用程序崩溃了,在
onCreate()
方法中,你可以显示一个对话框“I'm sorry,the application crashed,hope never again:)"。e7arh2l62#
诀窍是首先确保它不会强制关闭。
如果使用
Thread.setDefaultUncaughtExceptionHandler()
方法,则可以捕获导致应用程序强制关闭的错误。查看at this question,了解使用
UncaughtExceptionHandler
记录应用程序引发的错误的示例。mu0hgdu03#
如果您使用Crittercism或其他错误报告服务,接受的答案几乎是正确的。
字符串
ut6juiuv4#
只需将此类添加到包中即可
字符串
在您的应用程序或每个Activity类中,在onCreate()方法中只需调用:
型
nsc4cvqm5#
字符串
vdgimpew6#
下面是我的代码,你应该在
MainActivity
的onCreate()
方法中调用appInitialization()
字符串
lo8azlld7#
对于Kotlin用户,在MainActivity的onCreate()方法中调用这两个扩展扩展函数,就在超级调用之后,最好在通常在onCreate()中编写的任何其他代码之前。
字符串
我们称之为过程。(Process.myPid())和exitProcess(2),因为如果我们看看Android的开源代码,that's actually the default and proper handling that gets called by Thread. getDefaultUncaughtExceptionHandler(),它会导致我们的应用程序崩溃,并引发臭名昭著的ANR对话框,我们希望通过遵循原始实现而不是在uncaughtException()结束时做任何时髦的事情来成为好的Android公民,比如根本不崩溃或显示另一个活动(永远不要这样做)。
请注意,Kotlin的exitProcess()方法只是Java的System.exit()的 Package 器,无论您在构造函数中传递什么状态代码都无关紧要,我在代码中将其设置为
2
。请注意,在Intent中,我们将一个布尔标志“isCrashed”设置为
true
,我们将使用它来检测是否有意外异常导致应用重新启动,并相应地向用户显示一个对话框,通知他们崩溃。showUncaughtExceptionDialog()扩展函数是可选的,但是如果由于崩溃而要重新启动应用程序,最好通知用户。
lvjbypge8#
您可以使用app_watchdogd.sh观看并重新启动您的应用程序与root Android设备