在Android应用程序中,如果我们没有得到正确的例外,我们通常会收到"强制关闭"错误.
如果强行关闭,如何自动重启我的应用程序?
是否有任何特定的权限用于此?
Gyu*_*sik 94
要做到这一点,你必须做两件事:
请参阅以下如何执行以下操作:
调用Thread.setDefaultUncaughtExceptionHandler()
以捕获所有未捕获的异常,在这种情况下uncaughtException()
将调用方法."强制关闭"将不会出现,应用程序将无法响应,这不是一件好事.为了在崩溃时重新启动应用程序,您应该执行以下操作:
在该onCreate
方法中,在您的main活动中初始化一个PendingIntent
成员:
Intent intent = PendingIntent.getActivity(
YourApplication.getInstance().getBaseContext(),
0,
new Intent(getIntent()),
getIntent().getFlags());
Run Code Online (Sandbox Code Playgroud)然后在您的uncaughtException()
方法中添加以下内容:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);
Run Code Online (Sandbox Code Playgroud)
你也必须打电话System.exit()
,否则将无法工作.这样,您的应用程序将在2秒后重新启动.
最终,您可以在应用程序崩溃的意图中设置一些标志,并且在您的onCreate()
方法中,您可以显示一个对话框"我很抱歉,应用程序崩溃,希望永远不会再次:)".
Dav*_*ebb 17
诀窍是确保它首先不强制关闭.
如果使用该Thread.setDefaultUncaughtExceptionHandler()
方法,则可以捕获导致应用程序强制关闭的异常.
请查看此问题,以获取使用UncaughtExceptionHandler
记录应用程序引发的异常的示例.
如果您使用Crittercism或其他一些错误报告服务,接受的答案几乎是正确的..
final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void uncaughtException(Thread thread, Throwable ex) {
Intent launchIntent = new Intent(activity().getIntent());
PendingIntent pending = PendingIntent.getActivity(CSApplication.getContext(), 0,
launchIntent, activity().getIntent().getFlags());
getAlarmManager().set(AlarmManager.RTC, System.currentTimeMillis() + 2000, pending);
defaultHandler.uncaughtException(thread, ex);
}
});
Run Code Online (Sandbox Code Playgroud)