我与 Android 的故事|社区征文
![我与Android的故事|社区征文](https://static001.geekbang.org/infoq/91/91f799daca5003cbe16c604556c2fc7f.jpeg)
1.项目概要:
2.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 开发知识体系、形成个人的音视频开发知识体系,与君共勉^-^
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/cfb16920f6739c251cb90ee7e】。文章转载请联系作者。
评论