博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android错误threadid=1: thread exiting with uncaught
阅读量:6709 次
发布时间:2019-06-25

本文共 2479 字,大约阅读时间需要 8 分钟。

hot3.png

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

在项目开发中测试时崩溃,错误如上 

该错误的意思是线程中存在没有捕获到的异常。一般情况下捕获异常使用

try { } catch (Exception e) { }

但是在线程池中,线程池在执行任务时捕获了所有异常,这样一来线程中所有的异常都无法捕获到抛出的异常。 

即 try catch 捕获不到异常了。 
Java中有一个接口,UncaughtExceptionHandler 描述如下:

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

Thread类中的一个方法

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

现在还无法捕获到线程中的异常,还需要调用一个方法

Thread.setDefaultUncaughtExceptionHandler(this);

在OnCreate方法中调用一下即可

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

完整代码如下

//导入包 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);    }

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

转载于:https://my.oschina.net/u/555639/blog/423908

你可能感兴趣的文章
超级变变变:喵星人汪星人还有街景神奇变身 | Paper+Code
查看>>
Exchange2016 高可用性配置及介绍
查看>>
RHEl 5服务篇—部署Postfix邮件服务(二)配置邮件服务器的收、发信服务
查看>>
DIY Func same as strncpy()
查看>>
推荐阅读的技术书籍。
查看>>
[CI框架02]视图View使用
查看>>
我的Linux系统的一些截图 之四
查看>>
centos 5.1遇到的问题总结
查看>>
DC学院数据分析学习笔记(一):获取数据
查看>>
Angular.js Services
查看>>
Javascript总结 - 1
查看>>
java连接数据库(access)
查看>>
[图示]做人36字诀:五)解困渡厄字诀——教你轻松快乐
查看>>
Linux负载均衡软件LVS之一(概念篇)
查看>>
《统一沟通-微软-实战》-6-部署-1-前端服务器-3-拓扑设计
查看>>
WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
查看>>
JRuby:使Java和Ruby成为一家人
查看>>
微软邮件系统Exchange 2013系列(十一)配置POP3 和 IMAP4服务
查看>>
线程的优先级
查看>>
【STM32 .Net MF开发板学习-27】GPRS通信实现
查看>>