6

アプリケーションで発生したキャッチされていない例外を次の方法で処理しています。

Thread.setDefaultUncaughtExceptionHandler(this);

これは 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();
    }
}
4

2 に答える 2

1

finish()私はあなたのサンプルコードでいくつかのテストを行い、それがから動作することを発見しましたuncaughtException(). ただし、サイレントであるため、ユーザーにフィードバックを与えることはありませToastgetApplicationContext().

私が機能させることができたフィードバックを送信する唯一の方法は、 を使用しNotificationManagerてステータス バーを送信することでした。NotificationgetApplicationContext()Context

私はそれに多くの時間を費やしませんでしたが、残念ながら、これはPendingIntent、ユーザーが通知自体をクリックしたときに処理する必要があることを意味しているようです。のセットが未処理の例外を生成するものである場合、これを同じActivityように行うと、明らかに無限ループのリスクが生じる可能性があります。ActivityPendingIntent

Activityただし、おそらくダイアログ テーマを使用して、vary basic を作成し、それを開いてクラッシュを説明することは可能です。

于 2012-04-07T23:32:31.167 に答える
0

この問題に対処するためのより穏やかな方法があるかどうかはわかりませんが、試してみてください:

import android.os.Process;

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