写点什么

阿里 P7 大牛手把手教你!美团 Android 开发工程师岗位职能要求,附赠课程 + 题库

发布于: 2021 年 03 月 27 日

前言


看到一篇文章中提到“最近几年国内的初级 Android 程序员已经很多了,但是中高级的 Android 技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级 Android 工程师的确不容易,一般需要进行大量的面试才能挑选出一个比较满意的。为什么中高级 Android 程序员不多呢?这是一个问题,我不好回答,但是我想写一篇文章来描述下 Android 的学习路线,期望可以帮助更多的 Android 程序员提升自己。由于我也是从一个菜鸟过来的,所以我会结合我的个人经历以及我对 Android 学习过程的认识来写这篇文章,这会让这篇文章更加真实,而并非纸上谈兵。


面对现有的如此多跨平台方案,为何当下最火的跨平台技术是 Flutter,有哪些优势呢?


RN、Weex 均使用 JavaScript 作为编程语言,JavaScript 作为前端开发语言,在跨平台开发中可谓大放异彩,利用 web 技术不仅能开发出网站,也可以开发手机端 web 应用和移动端应用程序,似有一统三界(Android、iOS、Web)的趋势,这就是大家常说的“大前端”时代。这些技术方案流畅度不太好,平台一致性较差,至今还没能大面积取代原生开发。


Flutter 是以 Dart 语言编写,开发体验更接近客户端,从大家使用反馈来看也是如此,Flutter 开发环境这一套的流程对于前端开发来说并不太友好。Flutter 的定位同样是多端一体化,但是以客户端为首,先磨平 Android 和 iOS 双端开发体验,再逐步向 Web 端渗透,从 Flutter 规划的 Roadmap 也能看出,Flutter for web 目前仍处于预览版,Flutter 客户端方向都已经如火如荼上线了不少应用。


在此之前,大家常说“大前端”,对于 Flutter 技术,在笔者看来称之为“大移动端”更贴切,Flutter 的 UI 框架优先支持客户端(Android/iOS)应用的同时,然后再适配 Web 端。移动互联网时代,不少公司都制定“移动优先”的战略,甚至只开发移动端,没有 Web 端。移动互联网的时代造就“大移动端”,Flutter 作为一款能做到媲美原生的高性能跨平台技术方案,或许一统天下。


在跨平台技术领域,只要挑战在,技术就不会停滞,伴随着技术不断演进与革新,终将走向美好。


6. Flutter 技术优势


Flutter 是彻底的跨平台方案,既没有采用 webView,也没有采用 JS 桥接原生控件,而是自行实现一套 UI 框架,在引擎底层通过 Skia 渲染到屏幕。对于 UI 之外所需要使用的移动设备自身提供的服务,比如相机、定位、屏幕触摸等,则采用 Platform Channels 跟原生系统通信的方式来实现。


对于 Flutter 优势,回到前面讲到移动端技术选型的 4 要素,研发效率、动态性、多端一致性、性能体验,分别对应下面这一组词语。





  1. 高效率:采用 dart 语言编写代码,虽然刚开始上手需要点时间,但熟练后效率比较高。一套代码适用多个平台(Android、iOS、Web),以及高效的 Hot Reload 能快速辅助调试;

  2. 动态化:2017 年 3 月苹果下发警告邮件,禁止 JSPatch 等 iOS App 热更新方案,从此 iOS 动态化成为一个不宜公开讨论的话题。同样地,Flutter 引擎在某一个官方版本对动态化做过一些尝试,但后续基于风险考虑移除,当然并没有阻碍大家对技术的探索,这里不方便展开讨论;

  3. 高一致性:实现 UI 像素级的控制,Flutter 渲染引擎依靠跨平台 Skia 图形库来实现,仅依赖系统图形绘制相关的接口,比如未来 Android 会支持 vulkan,iOS 会支持 metal,这些都是通过 skia 封装调用。可最大程度上保证不同平台的体验一致性,见下图所示。





  1. 高性能:渲染性能优于现有的各种跨平台框架,可媲美原生性能的跨平台技术方案,Dart 代码执行效率比 JS 高,通过 AOT 编译成平台原生代码,渲染采用自渲染 skia 方案,既不需要 JS Bridge 桥接,也不需要 Art 虚拟机参与。再从渲染原理来看看 Flutter 的高性能的底气在哪里。





图解:


  • Android 原生框架,通过调用 Java Framework 层,再调用到 skia 来渲染界面;

  • 其他跨平台方案(如 RN),通过 JSBridge 中间层来将 JS 写的 APP 转换成相应的原生渲染逻辑,可见比 Native 代码增加了更多逻辑,性能逊色差于原生框架;

  • Flutter 框架,APP 通过调用 Dart Framework 层,再直接调用到 skia 来渲染界面,并没有经过原生 Framework 过程,可见其渲染性能并不会弱于 Native 技术,这是一个性能上限很高的跨平台技术。


当然,不得不说目前的 Flutter 确实不够尽善尽美,会存在一些不够尽善尽美之处,比如生态不够健全,包体积问题,但其该方案的上限比较高,想象空间比较大,相信更多开发者参与进来,经过更多打磨,未来会做得更好。


7. 业界发展近况


2017 年 5 月 Google I/O 大会正式对外公布 Flutter,到 2018 年 12 月发布 Flutter1.0,引发全球大量的开发者和企业开始研究 Flutter。StackOverflow 2019 年的全球开发者文件调查中,Flutter 被评选为最受开发者欢迎的框架之一,超过了 TensorFlow 和 Node.js。





到目前,全球越来越多的公司已经在大家耳熟能详的知名 APP 中使用 Flutter 技术并落地,尤其国内知名互联网公司对 Flutter 投入度很大,社区也是非常活跃。





8. Flutter 未来趋势


目前 Flutter 主要在移动端 Android/iOS 双端跨端,Flutter 的愿景是成为一个多端运行的 UI 框架,能够支持不仅仅是移动端,还包括 Web、桌面、甚至嵌入式设备。在 2019 Google I/O 开发者大会上推出的使用 Flutter 开发 Web 应用的框架,同年 9 月发布 Flutter 1.9,并将 Flutter web 合入 Flutter 主仓库。





从架构图看,Flutter 采用同一个 Dart Framework 层来统一 Flutter C++引擎和 Web 引擎,最终可以运行在 Android,iOS,Browser 上,从 Flutter 引擎代码不难看出 Flutter 也是支持 Fuchsia 操作系统。


Fuchsia 是 Google 内部正在开发的一款新的操作系统,采用 Flutter 作为系统默认的 UI 框架,也就是说 Flutter 天然支持 Fuchsia,这无疑让 Flutter 在众多的跨平台方案更有优势。


总结


最后为了帮助大家深刻理解 Android 相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的 Android 开发中高级必知必会核心笔记,共计 2968 页 PDF、58w 字,囊括 Android 开发 648 个知识点,我把技术点整理成了视频和 PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。


以上分享【Android开发中高级必知必会核心知识笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到 GitHub 了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。


【Android开发中高级必知必会核心知识笔记】


网上学习 Android 的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。


网上学习 Android 的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。


2021 年虽然路途坎坷,都在说 Android 要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。


虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的 offer。


用户头像

VX公众号:编程进阶路 2020.11.28 加入

还未添加个人简介

评论

发布
暂无评论
阿里P7大牛手把手教你!美团Android开发工程师岗位职能要求,附赠课程+题库