繁体   English   中英

在处理未捕获的异常后,如何阻止我的应用程序僵尸化?

[英]How do I stop my application from zombifying after I handle an uncaught Excepition?

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

Thread.setDefaultUncaughtExceptionHandler(this);

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

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

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();
    }
}

我对您的示例代码进行了一些测试,发现finish()将从uncaughtException()开始工作。 但是它是无声的,因此不会向用户提供任何反馈,并且像您一样,即使使用getApplicationContext() ,我也无法调用Toast或任何其他可视消息框。

发送我能够工作的任何反馈的唯一方法是使用NotificationManagerContext使用getApplicationContext()发送状态栏Notification

我没有花太多时间在这上面,但不幸的是,这似乎意味着必须提供一个PendingIntent来处理用户单击通知本身时的情况。 如果为PendingIntent设置的Activity是生成未处理异常的 Activity,则使用相同的Activity执行此操作显然会冒无限循环的风险。

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

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

import android.os.Process;

Process.killProcess(Process.myPid());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM