clash 安卓 全局
这篇文章主要介绍了Android app会crash的原因及解决方法,帮助大家更好的进行Android开发,感兴趣的朋友可以了解下
当异常KillApplicationHandler捕获到异常,进行完一系列处理(主要是打印crash日志,通知AMS展示crash弹窗等)后,最终会杀死进程,这样你的app就崩溃了。
肯定有人会说,自定义一个异常捕获器,来覆盖掉系统的KillApplicationHandler,然后在捕获到异常后,不杀进程,app就不会崩溃了,就像下面这样,
这其实只是隔壁老王的思路,虽然确实防护住子线程的crash,但是当主线程出现异常时,app还是无法正常运行。这是因为,当UncaughtExceptionHandler捕获到线程抛出异常的时候,线程在执行完uncaughtException()中的处理后,就无法继续存活了。如果抛异常的线程是主线程,那就意味着主线程会死掉,这时你即便不杀进程,进程活着也没有任何意义了,app还是会停止运行。
要想不crash,只能让线程不要抛出exception,唯此别无他法。如果我们能把一个线程的所有的操作都使用try-catch进行保护clash 安卓 全局,理论上,就能做到app never crash。由于android基于Handler事件驱动的机制,可以在app启动时,向主线程中的MessageQueue中提交一个死循环操作,在这个死循环中不断去poll事件,并且将这个死循环进行try-catch,这样所有主线程中的异常都会被catch住,从而app就再也不会发生crash。
有人可能要php说了,你这样catch住主线程的异常了,页面可能要乱套哇。话虽如此,但你可以在catch中做业务保护呀。比如,我这里采取的做法是,关闭栈顶activity。 解决ActivityLifeCycle,维护一个Activity栈,
以上就是Android app会crash的原因及解决方法的详细内容,更多关于Android app crash的资料请关注我们其它相关文章!
编程客栈为广大编程爱好者、程序员提供专业且权威的编程教程,是您学习软件编程、网络编程、数据库、操作系统、程序设计、脚本、网页制作、建站技术、网站技巧、网络知识技术、CMS教程等必备网站,我们希望成为您心中理想的编程学习网站。