关于拦截异常,想必大家都知道可以通过Thread.setDefaultUncaughtExceptionHandler 来拦截 App 中发生的异常,然后再进行处理。
于是我的脑海里有个突如其来的感悟:让我的APP永不崩溃。既然我们可以拦截崩溃,那我们直接把 APP 中所有的异常拦截了,不杀死程序,这样一个不会崩溃的 APP 用户体验岂不是妙哉?
或许有人听了摇摇头表示不赞同:“老铁,出现崩溃是要你解决它不是掩盖它!!”
那就说说如何捕获程序中的异常不让APP崩溃,从而给用户带来最好的体验。
主要有以下做法:
通过在主线程里面发送一个消息,捕获主线程的异常,并在异常发生后继续调用Looper.loop方法,使得主线程继续处理消息。
对于子线程的异常,可以通过Thread.setDefaultUncaughtExceptionHandler来拦截,并且子线程的停止不会给用户带来感知。
对于在生命周期内发生的异常,可以通过替换ActivityThread.mH.mCallback的方法来捕获,并且通过 token 来结束 Activity 或者直接杀死进程。但是这种办法要适配不同SDK版本的源码才行,所以慎用。
现在经济寒冬及疫情, 虽然使招聘量变少,但我发现各大公司中高端职位有明显增加,这也意味着安卓开发已进入技术赋能业务时代,所以增强个人的竞争实力
,也就是 Android 开发能力很有必要。上面也为大家分享了个小知识点,接下来我将为你们分享如何搭建个系统的框架,构建自己完善的知识体系。比如下面的学习路线这样:
上面这张脑图是建议 Android 开发同学重点掌握的内容,想要掌握复杂的技术,必须要理解其原理和架构。
有时候我面对复杂多变的移动网络、耗电、I/O 等复杂问题,不知从哪里入手,直到遇到这些大佬们整理的资料,跟着大佬学完,特别是在处理问题的策略和知识的广度方面给了我很多的启发,对未来的学习也提供了方向。
下面是对标每个模块的文档学习资料!!!
深入学习Java语言,全面掌握Java面向对象思想,掌握热修复与JVM原理。
学握Android UI特性与版本适配,全面了解自定义UI,深入理解Android系统内核原理技术。
时间和空间的复杂度来写出优雅的高效代码实战,解决用户使用App过程中的卡顿与保活技术,学握加固/奔溃/卡顿/启动过程的问题。
精通C/C++/JNI基础,全面掌握图形图像处理,音视频处理,人工智能应用等技术。
从热修复/热更新到组件化/插件化,在深入理解Rxjava,手写图片和网络框架。全面精通Google Android jetpack实时更新技术,应用Kotlin进行项目实操。
掌握小程序从无到有的构建过程,能够将app开发的能力复制到小程序中,并进行项目实战。
学习Dart基础和高级语法,掌握控件/布局/动画/操作手势/线程/网络以及交互等核心技术。
除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
④2020大厂面试高频知识点
⑤Jetpack架构组件从入门到精通
⑥Framework精编内核解析
主要内容包含:
⑦Kotlin强化实战(附Demo)
小总结:
- 如果你平时只知道埋头苦干,或过于死磕某个实现细节,没有抬头审视过这些技术,那么在准备面试之前,很有必要好好梳理一下 Android 知识体系,这样才能拿下满意的 Offer。
- 你能在Android这条路上走多远,不取决于你的起点,也不取决于你当前所处的位置,而是你是否对此有持续的热情和足够的专注,来支撑你真正付诸行动。