内容来源:极客时间「Android开发高手课」面试
做者;张绍文
今年年初,我去上海参加一个移动技术会议,问了不少开发者最近在忙啥。令我很是惊讶的是,你们讲的最多的仍是用户体验和应用质量。特别是出海东南亚的同窗,面对一堆512MB内存的设备、无处不在的弱网络流下了无助的眼泪。安全
除了内存优化、弱网络优化,想作一款高质量的应用还远远不止这些。一方面,咱们面对的环境愈来愈复杂。过去的iOS开发者可能作梦也想不到,如今也要开始适配屏幕和双卡双待了,更不用说Android那多如繁星的机型、厂家和系统。若是你的应用也要出海,那么还要面对几十个国家不一样的语言、环境。性能优化
另外一方面,咱们的代码跟业务也愈来愈复杂了。先不说大量“年久失修”的历史代码,业务愈来愈复杂,如何管理好几十上百个模块?还要面对React Native、Flutter、TensorFlow等各类语言跟框架堆积在一块儿的状况,再加上复杂的环境和庞大的系统,想一想作一款高质量的应用真的不容易。微信
既然打造一款高质量的应用那么困难,咱们能够先从哪里入手作些什么呢?个人方法是把应用当成一件商品,想象一下商品在流水线生产的过程,那么怎样在每一个步骤作好“质检”呢?这就要从应用交付的流程提及。网络
在我看来,一个应用至少会通过开发、编译CI、测试、灰度和发布这几个阶段。每一个阶段须要关注什么问题呢?架构
对照应用的交付流程,我来介绍一下专栏的学习方法。专栏“高质量开发”模块主要对应的是开发阶段,你能够带着实践过程的困惑去深刻学习开发须要的各类武器。专栏“高效开发”模块主要对应编译CI、测试、灰度和发布阶段,你能够结合实际工做全面提高整个应用交付的效率。另外,我认为一个好的架构能够减小甚至避免团队出错,也是打造一款高质量应用很是重要的一环,所以我会在最后的“架构演进”模块和你聊聊如何设计一个好的架构,以及架构该如何选型。并发
请你思考一下,在应用交付的这几个阶段中,咱们对高质量的目标和实现方式是否同样呢?开发阶段有开发人员,可能但愿采集尽量多的数据;测试阶段有测试人员,可能更针对实验室环境或与竞品对比进行测试;灰度和发布阶段可能也有专门的运维人员,策略会相对保守一些。很明显,不一样阶段咱们对高质量的目标跟手段可能不太同样。app
一个公司有多套质量系统,这在大公司是很是广泛的现象。咱们但愿有一个统一的平台,整合应用的人员和开发流程,这就是咱们常说APM质量平台。框架
APM的全称是“Application Performance Management”,即应用性能管理。据我了解,国内像阿里、腾讯、美团点评、饿了么、爱奇艺这些公司都在大力投入。Google今年也发力Android Vitals监控,新增了耗电、权限管理模块。那么APM质量平台究竟有着什么样的魅力呢?运维
那这个质量平台须要关注哪些问题呢?这须要看咱们用户关心什么问题。有的问题多是致命的,像崩溃、卡死、白屏。另外一大类问题就是性能问题,安装包大小、启动、耗时、内存、耗电、流量都是这一个范畴。在这个专栏里,我并不会教你如何从头搭建一个APM平台,我会更期待你掌握背后所须要的知识,它们主要包括:
因为Android版本的碎片化和国内Android生态的乱象,“Android开发者很苦,国内的Android开发者更苦”。11月16日,第一届安卓绿色联盟开发者大会在北京召开,会议上推出了应用体验标准V2.0,里面也对应用的兼容性、稳定性、性能、功能和安全作了详细的定义。
在极致性能的同时,咱们但愿能更进一步地打造“绿色应用”。在这个过程当中,一个全面而强大的APM质量平台会是咱们坚实的后盾。固然对于大多数中小开发者来讲,咱们更建议选择成熟的第三方服务。但深刻了解它们背后的原理,不管是对咱们如何选择合适的服务,仍是平常开发工做都会有很大的帮助。在学习完上面的这些内容以后,你也会以为其实“性能优化”并非那么“遥不可及”,咱们也能够慢慢地迈向“性能优化专家”之路。
不过咱们须要明确一点,虽然移动APM质量平台能够帮助咱们快速发现和定位问题,可是监控并不能保证明现高质量,这里最关键的永远是人,而不是系统。为何呢?我举两个小例子。
你在工做中可能总能遇到这样的场景,我管它叫反馈问题三连击:“是个人问题吗?”“能复现吗?”“你的测试靠谱吗?”。虽然经过APM质量平台能够减小推卸责任,但有些人的作法一般仍是发现空指针加一个判空,发现并发问题加一个锁。这里的空指针真正缘由是什么?这里判空了后面的逻辑是否还会运行正常?有没有更加好的方法或架构能够避免这个问题?咱们真正应该反问的是这三个问题,把“质量观”深刻骨髓,真正去想要获得我的成长,深挖背后的缘由。
第二个例子是,我发现许多人都在问题没法忍受,或者说是老板没法忍受的时候才去开启各类优化专项,但过后又不了了之。咱们不少时候都在用战术的勤奋掩盖战略的懒惰,性能优化的关键在于如何解决存量问题,同时快速发现增量问题。APM质量平台只能够协助咱们,并不能解决组织内部的心态问题。
看到这里可能你会有这样的疑问,咱们在小公司根本没有机会学习到这些东西呀?确实如此,我的与公司一块儿成长是最快速,也是很是可贵的事情,但并不必定人人都会有这样的机会。从我本身的经验来看,在搜狗、微信会遇到各类各样的疑难问题,也能够有不少时间去研究,让我在解决过程当中得到成长。
幸运的是如今你们都更加乐于去分享,在专栏和技术会议中,咱们能够看到不少成熟的解决问题的经验和思路,在GitHub咱们能够找到不少优秀的源代码。在这个环境下,咱们须要耐得住寂寞,多抠一些细节,多深刻研究,多停下来总结。
我来分享一个个人故事,2013年初我去面试微信,前面都不太理想,最后仍是经过了。后来有一次跟面试官闲聊提及这个事情,他们认为有一件事情打动了他们。2012年的时候,LeakCanary还没开源,我在使用MAT作内存泄漏分析的时候总以为很不爽。为何不能作自动化?为何看不到Bitmap的图片?我当时深刻研究了内存文件Hprof的格式,作了几个小创新:
如今看起来这些功能并非太难,但若是放到六年前,想到并且能作到的人相信并很少。讲这个故事仍是但愿你能在工做和实践中多停下来思考,多深刻研究一些细节,不少看似不经意的思考和创新,可能在往后发挥更大的价值。
更多内容可看个人专栏「Android开发高手课」,也可加我运营Monica的微信:imonica1010,得到更多技术技能图谱。