Android开发-新建线程崩溃

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android开发-新建线程崩溃相关的知识,希望能为你提供帮助。
一直不满意车机不能实现屏保,最近发现可以通过设置亮度实现,顾萌生了自己写程序的来实现的念头,遂修改原来练手的app。毕竟过去了1年,各类程序、sdk都已经更新了不知道多少版本。经历了痛苦的升级、更新,终于没能在原有的代码上直接升级,还是新建一个工程,复制原来的代码来生成app。
原来可以跑的app,竟然崩溃,而且还不能截获异常。通过debug,发现崩溃跟新建了一个线程有关,网上度了一下,发现还是能够捕获此类异常,原文:Android UncaughtExceptionHandler捕获线程崩溃异常。
我原来的代码仅一句:new downloadApkThread().start();
修改为:

1Thread thread = new downloadApkThread(); 2thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 3@Override 4public void uncaughtException(Thread thread, Throwable ex) { 5//TODO 6System.out.println(ex.getLocalizedMessage()); 7} 8}); 9thread.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开发-新建线程崩溃】至于第二个问题,不知道为何原来的代码没问题,现在就出现问题,也许是android studio和SDK升级了所致?反正没时间深究。

    推荐阅读