Android开发中应该有的思考
想起前段时间,公司入职了一个安卓工程师,说是工作3年多了。吃饭的时候经常听到其他同事吐槽那个人太菜了。我心想,能有多菜,总不至于基本工作都做不了吧?
最近他被调到了我们小组,负责接手某个app的后续开发。那个app已经是个半成品,按理说,不出半个月肯定做完了。
可是每天看他愁眉苦脸的鼓捣,也不知道做的咋样了。
某天中午他趁着大家都出去吃饭,让我帮他看看。我一看,这个项目基本没什么进展啊,反而漏洞百出。装上这个应用之后,十分卡顿,随便点点,就有三个地方报错了,经常使用一段时间就莫名其妙的闪退,而且时不时跳出应用异常,建议卸载的提示。一登录就三处报错,什么鬼???一进行检查,发现里面有大量的内存泄漏和内存抖动问题。
我问他你不是工作3年了吗?怎么能做成这个样子?
他支支吾吾半天,才说自己是自学了3年。我问他Java掌握的怎么样?他说,做andriod还要掌握Java吗?
我震惊了!这TM怎么通过面试的???
刚好老板路过,我正准备抱怨一番。没想到他先开口了:“二舅,一起去吃饭吗?”
老板笑着和他一起走了,只剩下我在风中凌乱…
本故事纯属虚构,如有雷同,可能是巧合吧。
人还是需要有危机意识:
人在年轻的时候不能过的太舒服,刚毕业前几年还是要多吃点苦,努力提高自己的专业知识,提前做好积累,等后面干不动了,也有老本可以吃啊。
“平时工作用不到这些东西,自己也就没去看”。有这种观点的人,我相信不在少数。我就不明白了,一些技能,一家公司用不到不代表其它公司也用不到,人总得换工作吧,不多学一点怎么能通过面试呢。
话说回来,有些技能工作中还真用的少,但就是面试有用,这个不服气不行。
所以摆在面前得一个事实:现在随着年龄的增长,程序员的学习能力减弱,对新技术的掌握也会越发困难。对比年轻的程序员,年长的程序员的技术核心竞争力将不复存在,原因无非是在自己应该静下来思考,静下来体系化学习的时候,没有把握住机遇,能力提升不起来。所以时时刻刻都要面临着被公司淘汰的风险。
每个人都要思考这个问题,在当今的互联网环境下,如何有危机感,如何规划自己的未来,只有未雨绸缪,未来才能应对自如。
Android 开发的现状
经过近十年的发展,Android技术优化日新月异,如今Android 10.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS。到了各大厂商手里,改源码、自定义系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
安卓手机的开发语言是Java(kotlin也是对java的封装),Java本身有一个很好的管理内存的机制—— GC。然而,GC却经常会遇到无法回收的内存,即内存泄漏,内存抖动,结果可能是OOM。
为了避免出现这些问题,我们首先必须对JVM的内存管理机制有自己清晰的认识。
JVM将运行时数据区分为线程私有和共享数据区两大类。
其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含 Java 堆、方法区,在方法区内有一个常量池。
内存泄露就是系统回收不了那些分配出去但是又不使用的内存, 形象点比喻就像家里的水龙头没有拧紧,漏水了。
随着程序的运行,可以使用的内存就会越来越少,机子就会越来越卡,直到内存数据溢出,然后程序就会挂掉,再跟着操作系统也可能无响应,接着你就按重启了…
内存泄漏分为:
常发性内存泄漏,偶发性内存泄漏,一次性内存泄漏,隐式内存泄漏。
隐式内存泄漏危害性非常大,因为较之于常发性和偶发性内存泄漏更难被检测到。内存泄漏的堆积,将会消耗系统所有的内存!手机变卡,就在所难免了。
另外,JAVA编程可以跨平台,但运行效率相对于iOS的Objective-C编程要低,运行时需要占用大量内存来换取执行速度,再加上不定期的内存自动回收机制,出现的现象就是卡顿。随着安装程序越多,大量的系统垃圾和后台运行占据了很多资源,出现卡顿现象,有些甚至还直接黑屏死机,严重影响了手机正常使用体验。使用时间越长,安卓手机出现卡顿就越多。
如今安卓手机的性能已经比之前提高了许多,一个优秀的Android开发者,需要熟练掌握JVM原理与性能优化技术,将自己开发的app性能做到极致。
JVM的核心原理你懂多少?如何通过JVM原理指导我们代码实践开发?我们该如何从架构层面优化产品性能?谷歌工程师是如何实现性能与功能上的改进技术?项目整体框架设计中该使用哪些优化技术?
最后
不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2020面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
最后这里是关于我自己的Android 学习,面试文档,视频收集大整理,有兴趣的伙伴们可以看看~
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2020年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2020年万事大吉。