最近在项目交付时,客户测试出程序偶尔会崩溃的情况,于是我去做测试,真发现如此情况,一看机型是G10,配置还算OK,但由于里面程序运行很多,内存初始就70%,
所以跑了一段时间后,程序有可能挂掉,因为是视频播放,程序本身较耗内存,最后在我不断尝试的情况下,再现了程序直接挂掉的情况。
在我以前就认为这种运行时错误时没办法捕获,但昨天自己网上搜了下,还真给捕获了,代码如下
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {//给主线程设置一个处理运行时异常的handler
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
//建议退出程序
System.exit(0);
}
});
我注意了下,一般这种情况,用360查看此时内存是80%多,很明显是由于内存不足,无法给新建的对象分配内存造成的运行时错误。
下图是捕获日志打印
上面是第一种,还有第二种是运行时异常。啥也不说贴代码
itry{
bitmapVideo.copyPixelsFromBuffer(Pixelbuffer);}
catch(RuntimeException re){
HandlerMessageUtil.sendRuntimeException(this.handler);
}
这是在绘图ondraw方法里的小段程序,本身没有捕获异常,就这样bitmapVideo.copyPixelsFromBuffer(Pixelbuffer);,后来发现报错,错误没截图,不过就是运行时异常,
如果没有捕获就如客户测的一样,程序直接崩溃,捕获以后法界给主线程发送消息提示,用户体验就好了。
我相信很多人都遇到过这种情况吧,该捕就捕,希望对大家有些帮助。