我与 Android 的故事|社区征文

社区征文Android

1.项目概要:

本文主要记录我本人从事移动开发的工作,作为一名Android工程师的职场故事,从一名入门小白,成为一名中高级工程师的心路例程,帮助自己回望过去展望未来。

2.Android初识

2015年,是一个大众创业万众创新热潮、“互联网 +”行动计划、分享经济的年份,还是智能手机增量市场的年份,各大国内外厂商纷纷入局智能手机市场。
那年我刚从学校毕业出来,因为是自动化专业具有C语言基础、加上个人的兴趣爱好、项目经验,所以,本意是想找一份嵌入式开发工程师岗位的工作。但多番应聘面试下来,发现嵌入式开发的工作对工程师的实战经验要求较高,需要具备Linux、驱动、文件系统等方面知识,且待遇收入不太符合个人预期。机缘巧合的情况下,有次听到朋友讲起Android系统,很多国产智能手机的操作系统便是Android(安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发)。
从各个招聘平台搜索招聘岗位信息发现,Android开发、Android工程师的岗位的需求很多,而且对工程师的技能要求属于入门级别,可能与当时环境有关,高级开发工程师的数量不会很多。经过搜集资料发现,Android本身就是一个嵌入式开发的平台,可以基于Android操作系统开发相关的应用程序,并且由Android衍生出来的就业岗位也很多,似乎是一个就业前景比嵌入式开发更广的方向,于是,决定开始自学、成为一名Android开发工程师。

3.打开Android大门

  • 广义上来说,Android开发多是指Android应用开发工程师,但也有部分岗位是需要操作系统定制的,如framework开发。当我在选择的时候,也是做了一番纠结,但在后来的工作中发现,不会有特别明显的界限,有时项目需求参与framework定制开发,有时又需要参与APP开发。
  • 《第一行代码》:这是一本入门级书籍,主要介绍Android应用开发的基础知识点,涉及搭建开发环境、跑通第一个HelloWorld的Demo、手把手教你入门Android的应用开发、介绍Android四大组件、数据存储、网络技术等方面,是一本特别适合Android初学者的书。通过本书的学习,基本上就能踏入Android工程师的门槛。不过,尽管你可能会跑通不同的Demo,也能通过修改程序实现简单的UI交互效果,但这仅仅是一个开始,Android系统很庞大,揪住其中某个知识点,都可能需要很多文字来阐述。
  • 如我们所知,当时kotlin语言还没有普及出来,主流使用的是Java,因此,很有必要学习Java语言基础,及整个Java的生态,修炼自己的Java底层内功,加深对进程运行原理的理解。
  • Java的学习路线:面向对象、三大特性、语法基础、数据类型、运算符、循环控制、内部类、单例设计模式、简单工厂设计模式、接口、数组、集合、IO、多线程、线程同步问题、生产者消费者模式、TCP网络、UDP协议、HTML和SQLite、Http和网络请求、URL、XML解析、JSON解析。
  • Android的学习路线:UI布局、UI控件、UI高级控件、Activity生命周期、Activity启动模式和Intent七大属性、异步任务、ListView、GridView、交互控件、Fragment、数据存储、Sqlite存储、ContentProvider、Loader异步加载、Handler、ActionBar、BroadcastReceiver、Service、动画

4.修炼武林秘籍

  • OkHttp:是一个执行效率比较高的Http客户端;支持HTTP/2,当多个请求对应同一host地址时,可共用同一个socket;连接池可减少请求延迟(如果HTTP/2不可用);支持GZIP压缩,减少网络传输的数据大小;支持Response数据缓存,避免重复网络请求;通过OkHttp的源码分析,可以对网络连接有一个感性的认识,同时,学习责任链的设计模式的编程方法。
  • 组件化开发:简单来说,拆成多个module开发,具有低耦合、模块化、可支持单元测试;编译速度快,调试方便;不影响团队协作开发,分层结构比较清晰;避免重复性工作,减少应用体积;可满足产品经理对APP的多种变化需求等优点。重点要解决的问题如下:如何统一管理多个module、如何实现各个module之间的跳转、如何实现module之间的通信
  • 插件化开发:App 的部分功能模块在打包时并不以传统方式打包进 apk ⽂文件中,而是以另一种形式二次封装进 apk内部,或者放在网络上适时下载,在需要的时候动态对这些功能模块进行加载,称之为插件化。这些单独二次封装的功能模块 apk ,就称作「插件」,初始安装的 apk 称作「宿主」。支持懒加载来减少软件启动速度,可以减小安装包⼤小,支持动态部署和bug 热修复。
  • Native开发:原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问实体设备组件,例如传感器和触摸输入。
  • kotlin:如果只是学习kotlin的语法,那么成本太高了。但kotlin与java和android 100%可互相操作,也就意味着可以使用整个Java的生态。收益,很多大厂项目、开源项目都在使用kotlin作为开发语言,这是一个趋势
  • 跨平台开发:当下流行的许多优秀的框架,比如:uni-app、flutter、ReactNative。这几个之间均有其特点和优势。
  • uni-app优点:学习成本低,一个使用 Vue.js 开发所有前端应用的框架
  • uni-app不足:uni-app不够完善,存在bug,官方回应的不是很及时
  • uni-app编程语言和官方:vue / DCloud出品的,属于国产
  • flutter优点:可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。是完全免费、开源的。快速开发,富有表现力和灵活的UI,原生性能
  • flutter不足:需要原生协作,维护3套代码;嵌套地狱,代码难看难维护
  • flutter编程语言和官方:dart / Google移动UI框架
  • react-native优点:跨平台开发,快速编译发布
  • react-native不足:不能完全屏蔽原生平台,调试的困难
  • react-native编程语言和官方:javascript / FaceBook 

5.扎根于现实 --- 讯通 App

  • 项目描述:基于IP技术架构的新一代集群通信系统,集语音、视频、图像、数据、文本消息等各种信息媒体于一体,可满足用户的实时沟通与数字信息传递需求。支持一键对讲功能;支持点对点音视频通话功能;支持即时聊天功能:实时短消息、发生小语音、发送文件、发送图片/视频;支持实时定位功能;支持视频直播等功能。
  • App功能:包括语音业务,多媒体业务,数字消息业务,以及扩展业务功能。其中核心业务是,单双工的音视频组呼功能,也包括常见IM基础功能(好友、群组、聊天)。为了满足团队开发和业务复杂场景的需求,开发设计上采用组件化开发架构,使用组件路由、组件通信总线等来统一规范组件间接口,打造一个编译速度快,支持单元测试,高内聚、低耦合,满足多变的产品需求的开发环境;根据业务特点进行逻辑分层:系统层、公共层、业务层。通过对项目的1.0版本的梳理、讨论和重构,2.0版本应用体积减少70%,编译时间缩短到30s,提升了应用稳定性和代码维护、迭代开发效率。
  • 感悟:对我来说是,入行Android开发行业的一个时间节点,从普通的开发人员,过渡到具备架构能力的工程师。通过引入组件化技术,很好的满足了产品经理对APP的多种变化需求。通过与后端人员配合,优化功能底层实现方案,使app按照预订时间达到可上线的条件。但在重构的过程中,遇到的困难很多,最大的影响因素是,同组的同事在开发的过程中留手尾,不负责任,随意引入第三方依赖库,无严谨的功能测试,这些依赖库存在致命bug,导致app上线后,在高版本系统带来的兼容性问题,坑了队友,导致团队为其加班加点解决问题。这也给我带来了很大的教训,不要随便轻易重构,如果不得已重构,最好得到领导和组织的支持,并且细化到重构目标、重构计划、时间节点等等。

6.总结与展望

从开始入门,一步一步,升级打怪,成为公司团队的核心员工,不断修炼提升专业能力,但说实话Android系统很庞大,如果想完全弄懂,需要很多的时间和精力,不夸张的说,十年都不为过。但在我过去的开发过程中,应用层的开发会多一点,framework的定制相对较少;对于新技术的学习也是很有必要的,比如:kotlin、Jetpack、Material Designer、Compose等等。可以给Android初学者的30个建议:How to become a better Android developer

我的座右铭是:Consistency is the key to success

未来我的学习方向是:形成个人的Android开发知识体系、形成个人的音视频开发知识体系,与君共勉^-^

文章来源:我与Android的故事|社区征文 - InfoQ 写作平台

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论