如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

专访何红辉:谈谈 Android 源码中的设计模式

  • 2015-11-01
  • 本文字数:2990 字

    阅读完需:约 10 分钟

最近 Android 6.0 版本的源代码开放下载,刚好分析 Android 源码的技术书籍《Android 源码设计模式解析与实战》上市,我们邀请到它的作者何红辉,来谈谈 Android 源码中的设计模式,以及近期 Android 开发中的一些热点话题。

受访嘉宾介绍:
何红辉( @MrSimp1e ),前友盟 Android 工程师,活跃于国内各大技术社区,热爱开源,热爱技术,热爱分享。Android 开源库 AndroidEventBus Colorful 作者,开发技术前线站长,《Android 源码设计模式解析与实战》作者。

InfoQ:祝贺您的新书出版,我看到 Github 上有一个和书名相同的项目,这本书的内容生产模式是什么样的?

何红辉:其实写这本书我很早就有规划了,这个想法诞生于我还未参加工作之前,因为国内确实没有这方面的著作。只是当时能力不足、资历尚浅,因此也就把这个想法埋在心中了。

2014 年 4 月份我开始在博客发表《Android 源码分析之设计模式》系列文章,慢慢将本书的雏形建立起来。2014 年底开始活跃于开源社区,到 2015 年 2 月份突然想到可以在 Github 上创建这样一个项目,通过开源的形式让更多的人参与进来,分享自己对模式的见解,或者说让大家把软件设计重视起来。

为了降低我个人在项目中的文章数量,我将分析的素材推荐给其他参与进来的同学,让他们来执笔,这样能够提升大家的积极性。同时,我作为整个系列 文章的审稿人员把握文章质量。经过大家一个月的努力,Android 源码设计模式分析的 Github 项目正式对外发布,一经发布得到了业界的广泛好评。这 让我很受鼓舞,因此出版的想法又再次浮现出来。

由于第一次写书出版,资历尚浅,特意邀请了关爱民老师与我一起撰写本书。在书中我们重写了所有章节,在深度、难度上都比 Github 上的开源文章有了大幅度的提升。因此,Github 上的文章与书中的内容是有很大差距的。

InfoQ:关于 Java 设计模式已经有很多经典的书籍,为什么还会想要写 Android 源码的设计模式?

何红辉:Java 设计模式方面的书籍通常只是通过 Java 语言来讲解设计模式,并非深入到一个系统中剖析设 计模式的运用。这类书籍是教读者什么是设计模式,而我们的书籍除了教读者什么是设计模式之外,更是深入剖析 Android 源码中设计模式的应用,让读者从 具体的代码中体会设计模式的使用场景、作用,真正领悟到软件设计之美。

InfoQ:您是怎么阅读和分析 Android 源码的,有哪些好用的工具?

何红辉:由于我分析源码只是分析特定的部分,因此对于工具并没有什么太高的要求,方便搜索与跳转即可。因此只是通过 Sublime Text 2,安装上插件即可方便的阅读代码,Atom 也是一个很好的选择。

InfoQ:最近 Android 6.0 源码对外开放,对这次更新您有哪些感兴趣的内容?

何红辉:对于 6.0 我并没有重点去关注,毕竟对于 Android 应用开发来说,用户设备的系统更新不像 iOS 那么及时。但是 6.0 中的 App Permissions、Android Pay、App Links 这几项新特性倒是值得关注,这些新特性对于应用开发来说相关性相对高一些。而我真正关注的是 Android 的整个生态在不断的扩大,在智能车、 智能手表以及物联网平台都有了比较大的进展,这对于从事 Android 人员的人来说才是最好的消息。

InfoQ:在 Android 开发中,哪些设计模式最常见?哪些设计模式受到误解最多?

何红辉:GOF 的《设计模式:可复用面向对象软件的基础》一书中总结了 23 种设计模式,但在开发中比较常用 的也就是单例、Builder、适配器、观察者、抽象工厂、外观、模板方法、策略这几个设计模式。学习任何东西都不能生搬硬套,设计模式更是如此。在合适 的场景中运用前人总结的设计模式解决自己的问题,这才是提出设计模式的初衷。

说到受到误解最多的设计模式可能要数工厂方法和抽象工厂两个模式了,这两个也是常用的设计模式,而且比较简单。受误解的原因是这两个模式容易让大家混淆,比如这里有两个问题:它们的作用是什么,它们的区别是什么?如果你没有一个确切的答案,那么应该回去翻翻书了。

InfoQ:最近 Android 开发里对 RxJava 研究比较多,您对响应式编程模式怎么看?

何红辉:响应式编程能够非常好的简化代码,让代码的可读性、稳定性都得到很大程度的提高。开发技术前线也翻 译了多篇高质量的关于 RxJava 的文章。但是 RxJava 的问题是在于它的库过大,超过 700KB 的大小让我有点不能接受。因此,如果你想使用响应式编 程来简化一些代码,那么可以参考 《 NotRxJava 懒人专用指南》这篇文章来创建一个简单的 Rx 库。这样既能对响应式编程有更深入的了解,也能了解实现响应式编程的实现原理,更能够提升自己的技术能力。

InfoQ:Android 源码中有哪些经典的架构,它们的好处是什么?

何红辉:Android 中最直观的分层架构和微服务架构。我们最常看到的 Android 体系架构就是一个典 型的分层架构,分为应用层、Framework 层、Native 层、内核层。上层是下层的调用端,下层则为上层提供服务,每一层都代表了应用的一个功能, 每一层的职责也相对较单一,这样使得系统的模块化程度、可测试性更高。

另一个明显的架构模式就是微服务架构。微服务架构的体现是 System Service 与 Framework 层的设计上。Android 系统在启动时会启动 ActivityManagerService、 PackageManagerService、WindowManagerService 等系统服务,用户在执行操作时,会通过 Framework 层向对 应的 Service 发出请求,具体的 Service 接到指令之后做出反应。这样一来,Framework 与这些 System Service 就构成了一个微服务架构,它们通过 Binder 进行通信,既解除了耦合,又提升了灵活性、可扩展性。

像 Android 这类大型应用中自然还有很多经典架构模式的运用,大家可以根据 Android 系统的源码中的线索来查找这些优秀运用示例。

InfoQ:能否谈下 Android 开发中 MVP/MVVM 架构的优点和缺点?它的使用场景是什么?

何红辉:MVP 与 MVVM 都是 Android 中比较好的应用架构模式,它们的优点都是能够降低耦合,提升应 用模块的可测试性,并且能够在一定程度上避免过于复杂的 Fragment、Activity 类型,使得整个软件架构变得更为简单、清晰。它们缺点主要是职 责分得比较细,这样必然会产生很多类型。例如一个 Activity,需要有 Model、View、Presenter 三个元素,这三个元素又要分接口、实 现类,页面一多各种 Model、View、Presenter 类型就繁杂起来。当然,通过合理的分包也能够在一定程度上缓解这个问题带来的负面影响。因 此,只要你想让你的应用架构更灵活、可扩展、易测试,MVP、MVVM 都是很好的选择。

InfoQ:接下来您有何学习或写作计划?

何红辉:在完成《Android 源码设计模式解析与实战》之后我就马上开始着手写另一本书, 《Android 开发进阶 - 从小工到专家》。这本书的定位是学习 Android 开发的第二本书,本书首先对 Android 开发的核心知识点进行深入讲解, 包括 View 与动画、网络、多线程、数据库,然后介绍单元测试、代码规范、版本控制、重构、架构等重要知识点,使得读者在深入技术的同时开阔眼界,能够以 更专业的方式设计应用软件,完成从只会实现功能的“码农”到软件工程师、设计师的过渡。《Android 开发进阶 - 从小工到专家》预计将于 2015 年 12 月 31 日之前上市,到时候还希望大家多多支持。

这两本书就是目前我这两年想写的全部内容了,完成这两本书之后自己也可以静下心来进行进一步的学习。不断的补充知识、更新知识,才能与这个行业保持同步,内心也能够得到满足。最后,希望大家多多向我反馈建议,多多交流,共同进步。

2015-11-01 23:0310277
用户头像

发布了 164 篇内容, 共 116.6 次阅读, 收获喜欢 392 次。

关注

评论

发布
暂无评论
发现更多内容

高性价比AWS Lambda无服务体验

查拉图斯特拉说

Lambda 亚马逊云科技 Amazon Lambda

软件研发流程、架构规范、技术标准、需求过程等全文档

代码人,代码魂

开发文档

有效降低数据库存储成本方案与实践 | 京东云技术团队

京东科技开发者

数据库 存储 数据存储 降本 企业号11月PK榜

软件测试/测试开发丨接口测试Mock实战练习学习笔记

测试人

软件测试 接口测试 Mock

一种简化操作日志记录方案 | 京东云技术团队

京东科技开发者

日志 系统 日志记录 企业号11月PK榜

孵化Web3区块链技术系统开发

l8l259l3365

向成本要效益!用友BIP助力车企突破内卷、打赢“降本战”

用友BIP

降本增效

文件传输|如何将100多G文件跨国安全传输到客户手里呢?

镭速

跨国文件传输

一文了解亚马逊云科技最新大语言模型

苏沐

大模型 亚马逊 亚马逊云科技 向量数据库

快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab

SEAL安全

#GitLab Walrus 企业号11月PK榜

云服务器数据安全保障措施看这里!

行云管家

云计算 云安全 云服务器 云数据

为什么说数据安全运维难?有好用的数据安全运维平台吗?

行云管家

数字化 数据安全 数据运维 数据运维安全

关于稳定扩散最详细的介绍

3D建模设计

人工智能 Stable Diffusion AI自动纹理 稳定扩散

沉浸式LED显示屏的定义和特点

Dylan

LED显示屏 沉浸式体验 沉浸式

LTV预测算法从开发到上线,浅谈基于奇点云DataSimba的MLOps实践

极客天地

数仓实践丨表扫描时过滤行数过多引起的性能瓶颈问题

华为云开发者联盟

数据库 数据仓库 后端 华为云 华为云开发者联盟

淘天Java一面,难度适中!(上篇)

王磊

Java java面试

搜狐基金使用 MySQL 遇到瓶颈?来看 TDengine 如何解决难题

TDengine

tdengine 时序数据库 搜狐基金

Stable Diffusion:最先进的文本生成图像模型

3D建模设计

人工智能 Stable Diffusion 稳定扩散 自动纹理

前端计算数字精度丢失问题解决方法记录 | 京东云技术团队

京东科技开发者

前端 企业号11月PK榜 数字精度

支持企业微信集成和登录!镭速传输新版本带来多项升级

镭速

镭速

软件测试/测试开发丨探索Python魔力:第一个程序到快捷键大揭秘

测试人

Python 软件测试

大模型产业生态有“成功密码”?百度高管2023进博会最新发声

飞桨PaddlePaddle

深度学习 产业生态 大模型

【慢SQL性能优化】 一条SQL的生命周期 | 京东物流技术团队

京东科技开发者

MySQL 数据库 SQL优化 企业号11月PK榜

入门指导:NGINX 中的 QUIC 网络连接和加密

NGINX开源社区

DNS DDoS QUIC nginx 开源版 HTTP/3

YonGPT构筑酒旅企业AI大脑 轻松拿捏“松弛感”

用友BIP

AI YonGPT

大模型集体失控!南洋理工新型攻击,主流AI无一幸免

Openlab_cosmoplat

人工智能 大模型

企业如何选型iPaaS平台

谷云科技RestCloud

ipaas

可测性,到底是什么?

老张

质量保障 质量门禁

专访何红辉:谈谈Android源码中的设计模式_移动_徐川_InfoQ精选文章