意外的Android应用程序杀死没有崩溃异常

时间:2016-09-01 18:12:32

标签: android sqlite

我使用以下代码在出现任何未处理的异常时自动重新启动我的应用。

private Thread.UncaughtExceptionHandler onCrashRestart = new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread thread, Throwable ex) {

        LOGGER.error("Unhandled Runtime exception occured ", ex);
        LOGGER.info("Restarting app in 5 seconds");
        Intent crashedIntent = new Intent(getApplicationContext(), RegisterActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, crashedIntent, 0);

        AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 5000, pendingIntent);
        System.exit(2);
    }
};

在活动onCreate中:

Thread.setDefaultUncaughtExceptionHandler(onCrashRestart);

这是按预期工作的。但是,我亲眼目睹了我的应用程序被杀死而没有来到这个处理程序的情况。我在日志中也看不到任何崩溃异常,我在设备的SD卡内维护。

尝试多次黑客攻击后,我停止了应用程序内的所有sqlite数据库操作,此意外崩溃已经停止。

我的问题是,是否有任何已知的情况下android杀死了应用程序并且在崩溃时没有任何例外?

此外,在什么情况下android会在前台运行时杀死应用程序?

编辑: 我在我的应用程序中使用Renderscript apis进行Bitmap操作。在模拟器中运行时,会出现以下错误:

09-01 15:04:46.866 4624-9767/? E/RenderScript: rsAssert failed: ret == bytes || mShutdown, in frameworks/rs/rsFifoSocket.cpp at 83
09-01 15:04:46.878 4624-9758/? E/RenderScript: rsAssert failed: ret == bytes || mShutdown, in frameworks/rs/rsFifoSocket.cpp at 83
09-01 15:04:46.882 4624-9610/? E/RenderScript: rsAssert failed: ret == bytes || mShutdown, in frameworks/rs/rsFifoSocket.cpp at 83
09-01 15:04:46.914 4624-9758/? E/RenderScript: rsAssert failed: ret == bytes || mShutdown, in frameworks/rs/rsFifoSocket.cpp at 83
09-01 15:04:46.934 4624-9781/? E/RenderScript: rsAssert failed: ret == bytes || mShutdown, in frameworks/rs/rsFifoSocket.cpp at 83
....

这可能是罪魁祸首吗?

1 个答案:

答案 0 :(得分:0)

应用程序如果在本机代码中崩溃,则Java异常不适用。在一个这样的实例中使用Renderscript支持库。通常,这些都很难调试。

阅读 - Catching exceptions thrown from native code running on Android处理相同内容。