自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils、DbUtils、ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的。最近决定研究一下xUtils的源码,用了这么久总得知道它的实现原理吧。我是先从先从BitmapUtils模块开始的。BitmapUtils和大多数图片加载框架一样,都是基于内存-文件-网络三级缓存。也就是加载图片的时候首先从内存缓存中取,如果没有再从文件缓存中取,如果文件缓存没有取到,就从网络下载图片并且加入内存和文件缓存。
这篇帖子先分析内存缓存是如何实现的。好吧开始进入正题。
那么 Android 开发工程师们应该如何面对当下的局面呢?
其实当下的供需关系不平衡不代表没有需求,市场上过多的是只会写 xml 和 Activity、只会用代码堆需求的初级 Android 程序员,而高级 Android 开发工程师仍然紧缺,并且薪资很可观。
那么接下来,问题就变成了“如何提升自己在 Android 市场上的竞争力”。
1. 提升通用技术能力
The more things change, the more important it is to know the underlying principles.
半衰期长的技术要打好基础,也就是更加通用的技术。
一来通用技术如数据结构和算法、计算机网络、操作系统、计算机系统结构等,对技术的深层理解有很大的帮助,二来这类技术在不同的语言和技术方向上切换时是共通的。
2. 提升软实力
软实力实际上也是一项通用的技能,甚至比第一条更加通用。
良好的沟通可以缩短开会的时长、节省相互之间的沟通成本,也使得团队合作更加愉快。不错的文档表达能力可以省去不少的重复沟通。
懂得规划自己的时间,上班时能更有条不紊地完成任务,下班也能高效地规划业余时间的学习。
懂得反思:为什么这个任务预计五小时能完成,却变成了三天;为什么这个需求要这样做,这么做是最合理的吗,还有更好的方式吗?
对问题、业务和自身的更多思考有助于更好地发挥和展现你的技术实力。
3. 选择一个细分领域不断深入
个人认为一个较好的学习方式是先广度优先遍历,即粗略了解自己领域的各方面知识,然后深度优先遍历,即选择一个自己感兴趣或者觉得值得深入的方向深挖下去,等到这个方向学习研究得差不多了,再去深入下一个方向的技术知识。例如:
插件化技术、响应式编程、组件化框架、系统架构等进阶技术,承托着业务之下的基础框架,能够使得开发者在面对需求和功能变化的时候有更快的反应和更优雅的行动。
业务逻辑日渐成熟的形势下,用户体验越来越重要,突然的软件崩溃或是加载图标持续5秒,对于高质量应用都是阻碍。渲染速度、网络请求体验、I/O优化、热修复技术、耗电优化,都是性能优化需要重视的点。
Android 现在细分的领域非常多,逆向安全、音视频、物联网、SDK开发等等,可以在这些领域中选择一个并不断深入。
若是从时代背景的角度考虑,当下处于信息时代,用户接收和喜爱信息传播的形式一路从文字、图片、音频、视频,到了如今的直播。音视频会是一个不错的选择。其中会涉及到音视频编解码和音视频同步处理、特效处理、合成等等技术,对于 Android 底层源码的理解也十分有帮助。
找准自己适合和感兴趣的方向,然后埋头往期冲就行了。 现在就去把你保存的那些Android的书本或者是视频翻出来学习吧!
总结
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
点击:《Android架构视频+BAT面试专题PDF+学习笔记》
即可免费获取~
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。