6

我正在通过以下方式处理我的应用程序中发生的任何未捕获的异常:

Thread.setDefaultUncaughtExceptionHandler(this);

这是我实现 UncaughtExceptionListener 的启动器 Activity。我处理异常并将其发送到我的日志服务器就好了,但是,我的应用程序并没有结束。它只是像僵尸一样运行,直到按下主页或返回按钮。处理异常后如何终止进程?

编辑
这是一个测试和工作活动,它抛出一个未捕获的异常,该异常将被(由线程)捕获并处理。永远不会发布 toast,一旦记录异常,进程就会变成僵尸。

class TestActivity extends Activity implements UncaughtExceptionListener {

    @Override public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        Thread.setDefaultUncaughtExceptionHandler(this);
        throw new RuntimeException("I'm a destuctive booger.");

        setContentView(R.layout.activity_test);
    }

    @Override public void uncaughtException(Thread thread, Throwable toss) {
        Log.e(TAG, "An uncaught exception has been recieved.", toss);
        Toast.makeText(this, "Big Error", Toast.LENGTH_LONG).show();
    }
}
4

2 回答 2

1

我对您的示例代码进行了一些测试,发现finish()可以从uncaughtException(). 它是无声的,但是不会向用户提供任何反馈,并且像您一样,Toast即使使用getApplicationContext().

NotificationManager发送我能够工作的任何反馈的唯一方法是Notification使用getApplicationContext().Context

我没有花太多时间在上面,但不幸的是,这似乎确实意味着PendingIntent当用户单击通知本身时必须提供处理。如果用于生成未处理异常的集合,那么这样做Activity显然会冒无限循环的风险。ActivityPendingIntent

但是,有可能创建一个不同的基础,Activity可能带有一个可以打开并解释崩溃的对话框主题。

于 2012-04-07T23:32:31.167 回答
0

不确定是否有更温和的方法来处理此问题,但您可以尝试:

import android.os.Process;

Process.killProcess(Process.myPid());
于 2012-04-05T19:11:01.443 回答