Java 报告未捕获的异常

Java 报告未捕获的异常,java,android,uncaught-exception,android-anr-dialog,Java,Android,Uncaught Exception,Android Anr Dialog,我希望捕获未捕获的异常并将有关它们的报告发送到我的服务器。我就是这样实施的: public final class MyApplication extends Application { private static Context context; private static Handler mainHandler; private static boolean isDebug; @Override public void onCreate()

我希望捕获未捕获的异常并将有关它们的报告发送到我的服务器。我就是这样实施的:

public final class MyApplication extends Application
{
    private static Context context;
    private static Handler mainHandler;
    private static boolean isDebug;

    @Override
    public void onCreate()
    {
        Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler()
        {
            @Override
            public void uncaughtException(final Thread thread, final Throwable ex)
            {
                new Thread()
                {
                    @Override
                    public void run()
                    {
                        Looper.prepare();

                        ReportUtils.sendReport(thread, ex);
                        Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(thread, ex);
                        Looper.loop();
                        Looper.myLooper().quit();
                    }
                }.start();
            }
        });

        context = getApplicationContext();
        mainHandler = new Handler();
        isDebug = (0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE));
    }

    @Override
    public void onTerminate(){}

    public static Context getAppContext()
    {
        return context;
    }

    public static boolean isDebugMode()
    {
        return isDebug;
    }

    public static Handler getMainHandler()
    {
        return mainHandler;
    }
}

这是正确的实施方式吗?还有其他选择吗?

不要自己做,而是使用已经设置好的服务来做

Acra就是其中之一,它可以将您的崩溃报告上传到谷歌文档电子表格

Bugsense是另一个。它有免费帐户和付费帐户


Crashlytics对于android来说是相当新的,但是完全免费,所以我推荐它。设置起来非常简单。

就我个人而言,我会使用ACRA作为起点,定制它以与我的后端系统对话(或将后端系统调整为ACRA就绪)。忽略我之前的评论,我不知道你使用的是android。但是,您应该始终更喜欢
ExecutorService
,而不是在您的服务器上创建新的
线程own@CommonsWare谢谢你的建议。@colinmoreli创建一个简单的线程对我来说就足够了,不需要管理线程池或任何
ExecutorSerice
提供的东西。