我想在崩溃后重启应用程序。我正在使用下面的代码来执行该任务。
Intent mStartActivity = new Intent(HomeActivity.this, SplashScreen.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(HomeActivity.this, mPendingIntentId, mStartActivity,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager) HomeActivity.this.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
System.exit(0);
是的,它重新启动应用程序,但在其他教程中我找到相同的代码重新启动应用程序,但 System.exit(2)代码低于
Intent mStartActivity = new Intent(HomeActivity.this, SplashScreen.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(HomeActivity.this, mPendingIntentId, mStartActivity,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager) HomeActivity.this.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, mPendingIntent);
System.exit(2);
是的,在这两种情况下应用程序都重新启动但我想知道System.exit(0)和System.exit(2)之间的区别。什么时候特别使用它们?
答案 0 :(得分:4)
简短回答:从不。
您永远不应该使用System.exit(0)
或System.exit(1)
的原因,也不应该使用Android中的退出值,因为它会破坏活动的生命周期。 Android自己处理它,并试图干扰它是一个非常糟糕的主意。
如果您确实要杀死自己的应用,请使用Activity.finish()。
你应该看一下Android Activity Lifecycle,真正了解它是如何运作的。
答案 1 :(得分:1)
exit(0)
通常用于表示成功终止。 exit(2)
或任何其他非零值表示一般终止失败。
有关详细信息,请参阅此documentation以获取更多信息。
答案 2 :(得分:1)
请参阅下面的退出实施代码:
/**
* Terminates the currently running Java Virtual Machine. The
* argument serves as a status code; by convention, a nonzero status
* code indicates abnormal termination.
* <p>
* This method calls the <code>exit</code> method in class
* <code>Runtime</code>. This method never returns normally.
* <p>
* The call <code>System.exit(n)</code> is effectively equivalent to
* the call:
* <blockquote><pre>
* Runtime.getRuntime().exit(n)
* </pre></blockquote>
*
* @param status exit status.
* @throws SecurityException
* if a security manager exists and its <code>checkExit</code>
* method doesn't allow exit with the specified status.
* @see java.lang.Runtime#exit(int)
*/
public static void exit(int status) {
Runtime.getRuntime().exit(status);
}