码迷,mamicode.com
首页 > 移动开发 > 详细

Android开发-新建线程崩溃

时间:2017-08-06 00:13:07      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:targe   修改   实现   sage   添加   解决问题   apk   public   prepare   

  一直不满意车机不能实现屏保,最近发现可以通过设置亮度实现,顾萌生了自己写程序的来实现的念头,遂修改原来练手的app。毕竟过去了1年,各类程序、sdk都已经更新了不知道多少版本。经历了痛苦的升级、更新,终于没能在原有的代码上直接升级,还是新建一个工程,复制原来的代码来生成app。

  原来可以跑的app,竟然崩溃,而且还不能截获异常。通过debug,发现崩溃跟新建了一个线程有关,网上度了一下,发现还是能够捕获此类异常,原文:Android UncaughtExceptionHandler捕获线程崩溃异常

  我原来的代码仅一句:new downloadApkThread().start();

  修改为:

1     Thread thread = new downloadApkThread();
2         thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
3             @Override
4             public void uncaughtException(Thread thread, Throwable ex) {
5             //TODO
6                 System.out.println(ex.getLocalizedMessage());
7             }
8         });
9         thread.start();

  在行6处断点,发现线程崩溃的原因是:“Can‘t create handler inside thread that has not called Looper.prepare()”。继续在网上度,解释非常多,原因没仔细看,大概跟主从线程之间的消息分发有关,发扬一贯的囫囵吞枣精神,找了个能解决问题的最简单方案用了:Android开发报错 Can not create handler inside thread t

  我的从线程代码中出现使用了Toast之类的方法:“Toast.makeText(mContext, mContext.getResources().getString(R.string.soft_update_fail_downloadapk), Toast.LENGTH_LONG).show();”之类的代码时,就在前面加Looper.prepare();,后面加Looper.loop();。当然,还要记得import android.os.*;

  解决了两个问题,线程崩溃的异常截获,据原文描述,可以在主activity的OnCreate方法中添加下面代码,就可以截获所有线程发生时的异常,听起来挺美好,不过我没试,以后有需要再说吧。

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread thread, Throwable ex) {
//任意一个线程异常后统一的处理
System.out.println(ex.getLocalizedMessage());
finish();
}
});

  至于第二个问题,不知道为何原来的代码没问题,现在就出现问题,也许是android studio和SDK升级了所致?反正没时间深究。

Android开发-新建线程崩溃

标签:targe   修改   实现   sage   添加   解决问题   apk   public   prepare   

原文地址:http://www.cnblogs.com/badwood316/p/7291991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!