为什么Android应用程序会在runtimeException之后自动重启?

时间:2016-03-16 04:31:19

标签: java android runtime-error

我的应用程序运行在两个5.0 android系统中。

在我的开发中,我有一个未被发现的RuntimeException

遇到异常时,我的应用程序将自动重启,

我不知道为什么我的App自动重启?即使我拨打System.exit(1)

这是带有RuntimException的日志

E/AndroidRuntime(23905): FATAL EXCEPTION: main
E/AndroidRuntime(23905): Process: com.oosmart.mainapp, PID: 23905
E/AndroidRuntime(23905): android.database.sqlite.SQLiteException: no such table: devices (code 1): , while compiling: drop table devices
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
E/AndroidRuntime(23905):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1655)
E/AndroidRuntime(23905):    at com.oosmart.mainaplication.db.DBOperation.execute(DBOperation.java:81)
E/AndroidRuntime(23905):    at com.oosmart.mainaplication.db.DevicesDB.dropTable(DevicesDB.java:154)
E/AndroidRuntime(23905):    at com.oosmart.mainaplication.db.DBHelper.DropTable(DBHelper.java:30)
E/AndroidRuntime(23905):    at com.oosmart.mainaplication.fragment.UserCenterFragment.onExitClick(UserCenterFragment.java:128)
E/AndroidRuntime(23905):    at com.oosmart.mainaplication.fragment.UserCenterFragment$$ViewBinder$6.doClick(UserCenterFragment$$ViewBinder.java:74)
E/AndroidRuntime(23905):    at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
E/AndroidRuntime(23905):    at android.view.View.performClick(View.java:4806)
E/AndroidRuntime(23905):    at android.view.View$PerformClick.run(View.java:19952)
E/AndroidRuntime(23905):    at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime(23905):    at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(23905):    at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(23905):    at android.app.ActivityThread.main(ActivityThread.java:5313)
E/AndroidRuntime(23905):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(23905):    at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(23905):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1116)
E/AndroidRuntime(23905):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)

这是使用System.exit的日志

I/AndroidRuntime(20479): VM exiting with result code 1, cleanup skipped.
I/AndroidRuntime(23172): VM exiting with result code 1, cleanup skipped.
I/Process (24461): java.lang.RuntimeException

使用Runtime

的日志

更新: 即使我致电android.os.Process.killProcess(android.os.Process.myPid());

应用程序仍然使用新的pid重新启动。 我不知道为什么我不能完全退出代码。

2 个答案:

答案 0 :(得分:2)

可能是因为您没有完成以前的活动,当新活动创建异常时它会关闭当前活动并打开上一个和运行时异常确实会导致您的应用程序崩溃,而您正试图删除不在即使存在,甚至system.exit()也不会退出你的应用程序。当您使用任何复杂的编码时,最佳做法是用户尝试捕获。 如果我错了,有人会纠正我

答案 1 :(得分:1)

我的所有应用程序将在错误时重新启动,似乎它在Android Studio中发生。在调用finish()退出活动之后,您应该尝试捕获SQLiteException以停止崩溃。