X

Android 开发者成神之路

一个 Android 技术专家,至少有 2~3 个专业领域。

写在前面

如果你只是一个想成为 Android 开发者的人,并且还没有写过任何应用,那么这篇文章对你来说,还有点太早。本文主要是为了帮助开发者成为一个更专业的人。

本文,我会给你很多建议,不会让你空手而归。文章中列出了如何在短时间成为一个专业的开发者。读完文章,需要你自己去练习,并时常回来看看这些技能。

在本文开始之前,我就当你已经在 Google Play 发布过 Android 应用并且使用 GitHub 来进行源码管理。

2-4 年开发经验

当你在你的职业生涯中工作几年,你变成经验丰富的 Android 开发者,通过研究和学习,你可以很轻松的实现一些非专业化的功能。那下一步,你该做什么?

我认为,在这个时候,你已经很熟悉 Android 框架的基础知识了,可以尝试去学习更高层次的技能。这些技能不局限于 Android,它们是一些通用的软件开发的技能。具体来说,你可以研究以下主题:

  • 依赖注入

依赖注入是一个关注结构分离的设计模式。它主要是用来进行分离应用程序的两个功能:应用程序和核心功能、核心功能组件实现之间的链接。

从某些方面来说,实现了依赖注入的代码库就好你一个计算机:依赖注入的基础库就像是主板一样,而其他的功能组件就好像是 CPU、内存、外设等。只要你的代码中实现了依赖注入,你就可以很方便的插入新功能,并且可以很容易的重用其它组件的功能,也可以很方便的使用新组件的功能。虽然这个比喻有点夸张,但是在我看来,它也确实很好的反映了依赖注入背后的思想。

不幸的是,现在关于依赖注入的文章,很多都存在误解,这给初学者带来很多干扰。因此,如果你想学习依赖注入,我建议你读一下这篇文章,本文中,我分析了众多依赖注入的“神话“。

  • UI 分离

由于 Android 框架本身的架构,造成了我们在开发的过程中,使用户页面与应用程序中的其它逻辑耦合在一起。几乎所有的 Android 初学者都会这样。这种耦合会导致我们写一个很大的类,这个类里面有应用程序的 UI 绘制、网络处理、多线程处理、应用业务逻辑等。

根据我的经验,UI 逻辑与其它逻辑耦合在一起,会导致代码的可维护性越来越差,迟早会使用代码变得难以理解,无法阅读。到最后,可能会因为功能上的一点小变化,引起很大的副作用。

要将 UI 逻辑与其它逻辑进行分离,可以用使用 Model- View – X 的架构模式。例如: Model-View-Contoller(MVC)、Model-View-Presenter(MVP)、Model-View=ViewModel(MVVM)。这些架构模式都属于同一类架构,当然,这一类架构不仅仅包含列举的这几个,还有其它的架构模式。在这里,为了更方便的描述这一类架构模式,我把他们统称为 MVx 模式。

当你在学习 MVx 模式的时候,请记住,这些都不是架构,而是一种架构模式。这些架构模式仅用于 UI 展示逻辑。因此仅仅使用 MVx 并不能给你一个好的架构,要有一个好的架构,你还需要在其它方面做出更多的努力才能实现。

  • 多线程

有经验的 Android 开发者都会了解多线程,并且了解他们对应用程序的影响。你也许会说,我精通 AsyncTask、RxJava、协程等。我想表达的多线程不是你理解的这个。会使用多线程框架并不等同于理解多线程。

举个例子,众多 Android 开发者都认为,使用 AsyncTask 会导致内存泄漏。这个观点来自 Android Studio 默认的多线程 lint 规则中。既然如此,那这个观点就是对的了吗?很不幸,这个观点是错误的。在这里,我不讲解它们的细节,你可以读一下这篇文章,里面有很多关于 AsyncTask 的内容。

我认为要理解多线程程,就必须可以使用任何多线程框架,甚至是基于基础的 Thread ,都可以写出正确的并发代码。要实现这个目标,你不仅仅需要知道你喜欢的多线程库的 API,你还需要理解多线程的细节。这些多线程库虽然好用,但如果你不理解多线程的基础细节,那么你的应用程序出现多线程的问题只是时间问题。

如果你想学习多线程,从这个视频 开始,视频中讲解了所有 Android 开发人员都需要知道的基本概念与原理。

  • 自动化测试

据我所知,很多 Android 项目,都没有使用任何的自动化测试。在使用自动化测试的项目中,大多数也是 QA 人员使用 Appium 之类的工具来完成的。这是整个 Android 行业的现状,非常可悲。之所以没有自动化测试,这个问题可以追溯到 Android 起源,Google 也在很长一段时间里,没有关注过第三方应用的自动化测试。

现如今,有单元测试和 UI 自动化测试经验的开发者需求量很大。即使你到一家没有使用过任何自动化测试的公司去面试,如果你说你会自动化测试,就会给你的面试加分。反之,如果你去的是一个广泛使用自动化测试的公司,你没有自动化测试的技能,这会给你面试减分,处于劣势。

因此,我建议每一个 Android 开发者都去学习一下自动化测试的相关知识。就个人而言,我更喜欢单元测试。而一些开发者喜欢 UI 自动化测试。所以,可以选择一个你更感兴趣的技术,尝试一下。

总结

以上,这是我建议你,作为一个专业的 Android 开发者应该具备的技能。

你可能已经发现,我的文章标题是 《Android Developer Skills for 2020(2020 年,Android 开发者需要的技能)》,但是这篇文章中没有什么内容是特定于 2020 年的。我可以在一两年前写这篇文章,因为本文内容适合所有时间,基础和重要的概念不会经常改变。

现在,如果你对 Android 生态系统的最新发展感到好奇,你可以阅读我的另一篇文章 ,我总结了 2019 年底 Android 发展的状况。最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

一如既往,感谢你的阅读。你可以在下面留言评论和提问。

英文:Android Developer Skills for 2020

链接:https://www.techyourchance.com/android-developer-skills/

作者:Vasiliy Zukanov,独立 Android 开发及软件顾问

译者:罗昭成,Android 开发者