Android错误threadid=1: thread exiting with uncaught

Android错误threadid=1: thread exiting with uncaught exception (group=0x416298c8) java

在项目开发中测试时崩溃,错误如上 
该错误的意思是线程中存在没有捕获到的异常。通常状况下捕获异常使用 ide

try {
 } catch (Exception e) {
 }



可是在线程池中,线程池在执行任务时捕获了全部异常,这样一来线程中全部的异常都没法捕获到抛出的异常。 
即 try catch 捕获不到异常了。 
Java中有一个接口,UncaughtExceptionHandler 描述以下: oop

static interface Thread.UncaughtExceptionHandler // 当 Thread 因未捕获的异常而忽然终止时,调用处理程序的接口。



Thread类中的一个方法 post

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) //设置当线程因为未捕获到异常而忽然终止,而且没有为该线程定义其余处理程序时所调用的默认处理程序。

咱们须要实现这样一个接口UncaughtExceptionHandler,而后在程序的主线程中设置处理程序。 
代码以下 测试

import java.lang.Thread.UncaughtExceptionHandler; //implements UncaughtExceptionHandler public class Other extends Activity implements UncaughtExceptionHandler { //必须实现接口uncaughtException @Override public void uncaughtException(Thread arg0, Throwable arg1) { //在此处理异常, arg1即为捕获到的异常  Log.i("AAA", "uncaughtException   " + arg1);
    }

}



如今还没法捕获到线程中的异常,还须要调用一个方法 this

Thread.setDefaultUncaughtExceptionHandler(this);

在OnCreate方法中调用一下便可 线程

@Override protected void onCreate(Bundle savedInstanceState) { //在OnCreate方法中调用下面方法,而后再使用线程,就能在uncaughtException方法中捕获到异常 Thread.setDefaultUncaughtExceptionHandler(this);
}

完整代码以下 code

//导入包 import java.lang.Thread.UncaughtExceptionHandler; //implements UncaughtExceptionHandler public class Other extends Activity implements UncaughtExceptionHandler       {

    @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState);
        setContentView(R.layout.th); //在此调用下面方法,才能捕获到线程中的异常 Thread.setDefaultUncaughtExceptionHandler(this); //获取建立的 Button btn1 = (Button) findViewById(R.id.btn); //给btn1添加一个点击监听事件 btn1.setOnClickListener(new OnClickListener() {
            @Override public void onClick(View arg0) { //调用我本身的方法 Init();
            }
        });
    } public void Init() { //开启线程 new Handler(Looper.getMainLooper()).post(new Runnable() {   
            @Override public void run() { //此处的 try catch 是没法捕获到异常的 try { ////////////////////////////////////////// //须要在线程中调用的方法purchase.init(context, iapListener) purchase.init(context, iapListener); ////////////////////////////////////////// } catch (Exception e) { // TODO: handle exception Log.i("AAA", "INIG   " + e);
                    e.printStackTrace();
                }
            }
        });
    } //必须实现接口uncaughtException @Override public void uncaughtException(Thread arg0, Throwable arg1) { //在此处理异常, arg1即为捕获到的异常 Log.i("AAA", "uncaughtException   " + arg1);
    }

这样再次运行就会捕获到线程中的异常,不会致使项目直接崩溃 接口

相关文章
相关标签/搜索