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

百般思念 提交于 2020-01-11 05:13:26

问题


I am handling any uncaught exceptions that occur in my application via:

Thread.setDefaultUncaughtExceptionHandler(this);

were this is my launcher Activity implementing UncaughtExceptionListener. I handle the exception and send it off to my log server just fine, however, my application then doesn't end. It just runs along as a zombie until the home or back button is pressed. How can I kill the process after handling the exception?

Edit
Here is a test and working activity that throws an uncaught exception that is to be caught (by Thread) and handled. The toast is never posted and the process goes zombie once the exception is logged.

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

回答1:


I did some testing with your example code and discovered that finish() will work from uncaughtException(). It's silent however so doesn't give any feedback to the user and, like you, I was unable to invoke a Toast or any other visual message box even using getApplicationContext().

The only way of sending any feedback that I was able to get working was to use NotificationManager to send a status bar Notification using getApplicationContext() for the Context.

I didn't spend much time on it but unfortunately it seems this does mean having to provide a PendingIntent to handle when a user clicks on the notification itself. Doing this with the same Activity could obviously risk an infinite loop if the Activity set for the PendingIntent is one which generates an unhandled exception.

It would be possible, however, to create a vary basic Activity perhaps with a dialog theme that would be opened and explain the crash.




回答2:


Not sure if there is a gentler way of dealing with this problem, but you may try:

import android.os.Process;

Process.killProcess(Process.myPid());


来源:https://stackoverflow.com/questions/10033580/how-do-i-stop-my-application-from-zombifying-after-i-handle-an-uncaught-excepiti

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!