1.因为项目原因,总之就是需要一个app永不闪退,但是肯定会有些错误(如显示不全,点击按钮没反应或其他),注意是金枪不倒,不是毫无bug,没bug的程序被人发明出来那还得了。
2.https://www.jianshu.com/p/01b69d91a3a8 这个文章还可以。
3.有一个叫UncaughtExceptionHandler的接口,大概看名字就知道,就是未捕捉错误处理器。实现这个接口uncaughtException并Thread.setDefaultUncaughtExceptionHandler(接口具体实现)即可,那么所有未捕捉错误都会在此执行,默认的我没看,大概是打出日志并退出所有程序。所以若我们在新接口里不做任何事,就不会出现闪退(程序没有杀死)。
4.但是会造成其他问题,因为主线程调用完uncaughtException方法后就已经结束了,所以程序会无响应,即ANR?。过一会也会退出程序
5.应对这个上面所贴网址做的措施是,一开始就在主线程loop()中运行无限loop(),而子线程未捕捉错误方法中不做处理。即可以实现金枪不倒的app。
6.以上不好的地方是在一开始无论有没有错程序都在自己手动建立的loop()上运行,让我非常不爽。所以想有没方法在出现错误时才运行loop(),所以在uncaughtException方法中判断错误来自主线程时建立loop,而子线程时不做处理。这样就可以金枪不倒。
7.实际上uncaughtException一般用于捕捉闪退错误然后记录日志上传,这样用比较少,因为线上的app一般闪退比错误显示要好,但感觉安卓已经挺多做与硬件结合的东西(如广告机,电子班牌机,校园充值系统),这种时候维护困难(硬件分布全国各地),如若有闪退问题(连远程更新都用不了),所以金枪不倒有些作用。
8.但实际上没几个人这么干(估计),而且我自己也觉得怪怪的。
9.任何线程在触发异常时运行完uncaughtException即会结束该线程。
注:loop(),几乎安卓程序就运行在这个里面,我也半知不解,这也是我觉得没把握的难点。望请教。