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