public class UEHandler implements Thread.UncaughtExceptionHandler {
    private MyApp softApp;
    private Context context;


    public UEHandler(MyApp app,Context context) {
        softApp = app;
        this.context = context;
    }

    public void uncaughtException(Thread thread, Throwable ex) {
        // fetch Excpetion Info

        ex.printStackTrace();
        // print
        long threadId = thread.getId();
        //Log.d("ANDROID_LAB", "Thread.getName()=" + thread.getName() + " id=" + threadId + " state=" + thread.getState());
        //Log.d("ANDROID_LAB", "Error[" + info + "]");
        new Thread() {
            @Override
            public void run() {
                Looper.prepare();
                Toast.makeText(context, "很抱歉,程序出现异常,即将退出。", Toast.LENGTH_LONG).show();
                            
                Looper.loop();
                
            }
        }.start();
        try {
            thread.sleep(3*1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (threadId != 1) {
            // 此处示例跳转到汇报异常界面。
            Intent intent = new Intent(softApp, splash.class);
            softApp.startActivity(intent);
        } else {
            // 此处示例发生异常后,重新启动应用
            Intent intent = new Intent(softApp, splash.class);
            // 如果<span style="background-color: rgb(255, 255, 255); ">没有NEW_TASK标识且</span>是UI线程抛的异常则界面卡死直到ANR
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            softApp.startActivity(intent);
            // write 2 /data/data/<app_package>/files/error.log
            // kill App Progress
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }

    
}
    public void onCreate() {
        super.onCreate();
        need2Exit = false;
        ueHandler = new UEHandler(this,getApplicationContext());
        Thread.setDefaultUncaughtExceptionHandler(ueHandler); // 程序崩溃时触发线程
    }