2020 年,Android 开发者须要的技能

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

QQ截图20200215210302.jpg

连接:https://www.techyourchance.com/android-developer-skills/
做者:Vasiliy Zukanov,独立 Android 开发及软件顾问
译者:罗昭成,Android 开发者程序员

许多 Android 开发者常常会问我,要学会哪些东西才能成为一个优秀的 Android 工程师?对于这个问题,他们的描述或多或少都有些差别,可是,整体来讲,咱们都须要学习一系列的技能,才能成为一个优秀的 Android 工程师。web

在我看来,存在这样的困惑是正常的。Android 是一个巨大而且动态的生态系统,你可能须要花好几周时间去了解并学习它相关的一些工具和概念,可是最后你会发现,它们有好多都不是很重要,或者说并非很是有用。所以,在本文中,我将分享我在 Android 开发中所使用到的重要技能,但愿可以帮到你,让你把你的精力集中到重要的事情上。面试

固然,若是你是一个经验丰富的 Android 开发者,这些知识可能你都知道。有不少技能和观点都须要不少基础知识的沉淀,当你没有足够的经验的时候,很难看到这些技能点。文中,我不可能列出全部 Android 开发者都须要的技能。因此,我根据不一样的经验,将这些知识点进行了粗略分组。请注意,这只是一个粗略的分组,并不必定是很精确的。设计模式

写在前面

若是你只是一个想成为 Android 开发者的人,而且尚未写过任何应用,那么这篇文章对你来讲,还有点太早。本文主要是为了帮助开发者成为一个更专业的人。网络

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

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

一,0-2 年开发经验

Android 是一个很是复杂的框架,它拥有陡峭的学习曲线。有一些复杂的概念的确是 Native 的 Android 开发者须要学习的,但另外一部分倒是因为 Android 的缘由,形成了它的复杂度。并发

当你向专业进军时,除了你的软件开发工做之外,你应该学习 Android 框架,忘记语言、架构、流行的开源库,专一于核心概念,并进行深刻的研究。app

具体来讲,我建议你更多的了解如下内容:

  • Android 内存管理和进程调度

当面临「Low Memory Killer」的时候,如何保证你的应用程序稳定可靠的运行?这是一件很复杂的事情。长话短说,当用户切换到其它应用时,你应用的生命周期就会被打乱,可是当用户过一下子从新切换回来的时候,用户却但愿你的应用程序像任何事情都没有发生过同样,正常运行。

在本文中,我并不会介绍内存管理的任何细节,若是你想了解它们,能够看看这篇文章。

  • 生命周期

若是有人要我说出 Android 应用程序中的复杂度和 Bug 的主要来源,我会立马大声告诉他是“生命周期”(而后捂住脸哭)。

Application、Activity、Fragment、Service、BroadcastReceiver、ContentProvider 和一些 Android 框架的核心组件,都拥有复杂的生命周期,而且它们的生命周期还不同。若是你以为这还不够多,Google 也一直在推出新的库和框架,这些库都有本身的复杂性和独立的生命周期。Loader, ViewModel 和 LiveData 都是为了解决这些问题而推出的。

有件有意思的事情,我历来没有看到过任何有关“生命周期“的定义。咱们一直在使用它,可是它究竟是什么意思呢?据我所知,在某种程度上,你只是把一些节点串联在一块儿,构建出一个生命周期的图。我对生命周期有过不少的思考,在这里,我将尝试对它进行定义。

组件的生命周期是一个抽象的状态机。这里的抽象的意思是指,这些状态机的状态是预先定义好的,它们之间的转换条件也是定义好的。可是这些定义是不完整的。你须要去实现缺乏的部分,使他们能够正常工做。这些缺乏的部分是这些组件方法的子集,咱们称其为“生命周期回调”,除了状态机自己以外,这些生命周期回调中,也有不少隐式的限制和约束。这些限制有些写在了文档中,而有些却并无记录。

生命周期到底有多复杂?咱们先来看一下这张图 (它有点不完整,还有点过期)。这张图,看起来有点可怕。不过,你也不要慌,大多数 Andorid 开发者都搞不明白这个图。事实上,即便 Google 的 Android 开发者也搞不明白生命周期的问题。Google 在发布 Lifecycle 组件的时候,里面引入了一些有关 Fragment 的 bug, 直到后续的新版本发布了才得以修复。

虽然如今你不须要彻底掌握 Android 的生命周期,可是你必需要知道一些重要的细节。不然,你的代码会变得混乱不堪,而且容易出现一系列难以解决的问题。我写了两篇文章 Activity 生命周期与 Fragment 生命周期 ,描述了生命周期的细节。当你不知道如何使用 onStart 和 onResume 时,你能够去看看这两篇文章。

当你掌握了生命周期的基础知识,你能够去看看 Gabor Varadi 写的 Android 开发的十宗罪 ,这篇文章,列举出了大多数开发者都会犯的错误。这些错误大多数都与生命周期有关。

顺便说一下,在面试中,生命周期相关的问题也会被常常问到。这也是你必须好好学习生命周期的缘由。

  • Context

在每个 Android 应用程序中,都有一个或多个上下文对象。

和生命周期同样,它也很难被解释。它就像是一个“上帝类“同样,它有很是多的能力。咱们很难用一两句话就把它描述清楚。尽管如此,理解 Context 职责和不一样 Context 以前的区别也是很是重要的。

本文中,没有更多关于 Context 的内容,我建议你去读一下 StackOverflow 中关于 《What is 'Context' on Android?》 的回答和这个回答的内容.

  • UI 线程

每个 Android 应用程序都有一个特殊的线程 —— UI 线程。这一个线程在屏幕上绘制出 UI 页面。若是你让 UI 线程超负荷运行,你的应用程序将会变得卡顿,不响应。在极端状况下,UI 线程中的错误会致使整个应用程序出错(至少看起来像是出错了)。

若是你想详细了解线程背后的机制原理,你能够去看这个视频,视频中详细解释了 Android 中的多线程,包含 UI 线程的相关细节和可能存在的问题。

  • 逻辑拆分

从总体上说,Android 框架的代码很不“整洁”。它包含着不少的上帝类,这些类中,每个有数千行代码,而且咱们还必须去扩展这些类,才能让咱们的应用程序运行起来。在多数状况下,无论是 Application, Activity ,Fragments 仍是 Service,咱们都是在一个很大的类中,作不少的事情。

虽然在 Andorid 开发中,这是一个常见的作法,但这样子作并不利于长期维护咱们的代码逻辑。所以我建议,要尽量的注意这个问题,多找机会去重构代码,将逻辑拆分到独立的类中去。

说实话,我如今并不认为,一个初级开发者能够对架构和设计作出太多的改善工做。正确的封装代码逻辑,提取出有意义的类,都须要一些开发经验。固然,我也不但愿你不去思考代码拆分,你能够作一些力所能及的事情,避免出现不可控的状况(例如,一个 Activity 中写了超过 5000 行代码)。

刚开始,你能够尝试拆分这篇文章中描述的与 Context 有关的逻辑。

二,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 自动化测试。因此,能够选择一个你更感兴趣的技术,尝试一下。

三,4 年以上经验

若是你对 Android 已经有了很是丰富的开发经验,那么,是时候学习一些“元”技能了,而且在特定领域进行深度研究。在我看来,如下技能对专业的开发人员来讲,都是很是不错的方向。

  • 技术方案评估

若是你尚未作过这件事情,那么如今是时候开始作了。每个重要的技术决定,都须要进行评估、权衡。有时候,这种决定带来的结果很是好,立竿见影。可是大多数时候,并不是老是可以立竿见影,看到效果。一般状况下,须要决策的范围越大,所涉及到的评估范围就越大,除了能够简单进行决策的事情,还有不少可评估项都是很是抽象,短期内根本看不到结果的。

在本身丰富的经验水平下,面对众多选择,你至少应该知道如何找到取舍。若是你能对技术方案评估提供有用的建议,你就很是优秀了。技术方案评估权衡这是一项很是复杂的技能。一般,在与其它开发者、项目经理甚至是其它部门员工讨论的时候,你能找到折中方案,就能进行方案评估。所以,在大数状况下,你只须要掌握评估方案的能力就够了。

那咱们所说的“技术方案的评估”究竟是什么意思?说实话,很难具体说明它是什么。不过,咱们能够提供一些反例,来解释为何不适合在开发中使用。举个例子:

咱们应该将多线程的使用迁移到 RxJava, 而不是 AsyncTask, 由于 AsyncTask 会致使内存泄漏。

正如我前面所说,AsyncTask 并不会致使内存泄漏。因此上面这句话是错误的。说这句话的开发者并无深刻的研究多线程。此外,他也没有提到 RxJava 的问题。对于一个项目中的开发人员来讲,RxJava 存在一个很陡峭的学习曲线。

咱们应该为咱们的新代码写单元测试,而且设定一个长期的目标,覆盖全部的代码,以确保咱们的代码质量。

这句话包含几个前提,首先,咱们如今开始单元测试是不可能的,至少须要开发人员投入时间来学习这种技术。编写单元测试是一个很明智的决定。咱们不能为全部代码编写单元测试,由于有一些部分是不稳定的。最后,达到特定的覆盖目标并不会自动提升“质量“。在这个例子中,开发者并不了解单元测试,他们没法肯定在项目中使用单元测试所涉及的问题和影响。

我但愿,你对“技术方案评估”已经有了大体的想法,若是你有一个重要的决定,你须要完成全部必要的调研,若是你依然看不到整个评估中存在的复杂网络,那多是你的调研没有作好。在作决定的时候,有些事情可能超出技术范围,你也须要考虑你的决策对其它部门同事的影响。

  • 专业领域

如何区分一个技术专家和一个普通开发者?是咱们熟悉的概念的数量吗?我认为,在技术方面,区分是不是专家主要在于知识上的深度。

做为一个技术专家,你应该有一个或者多个专业领域。你知道这些领域的详细细节,比通常的开发者知道的要多得多。你须要持续深刻的研究,来保证你的专业深度,了解专业领域的最新发展,不会对新的工具和技术感到惊讶。此外,即便你并无在任何项目中使用某些技术,你也须要研究这些技术使用上相关联的各类成本。

现现在,有一个本身的专业领域很难。这不是从博客中挑选几篇好文章进行阅读就能够的,也不是读完几本好书、上完几门好课就能够的。固然,经过这些内容进行学习,对你的专家之路都是有帮助的,可是要有本身的专业领域,惟一的方法就是积极参与其中进行学习研究并得到大量经验。

我很喜欢物理学家尼尔斯·玻尔说的这句话:

An expert is a man who has made all the mistakes which can be made, in a narrow field.(专家就是把领域内全部该犯的错都犯完的人。)

咱们能够在哪些领域进行深刻研究呢?实际上,几乎全部的均可以进行深刻的研究,在软件开发领域,没有任何一个领域会由于过小而不能设置成专业目标。对此,我也有一些建议:

  • UI

  • 构建系统

  • 离线工做

  • 并发

  • NDK

  • 持续集成

  • 性能

  • 架构

  • 监测

  • 项目管理

  • 专业知识领域

还有不少不少。须要注意的是,上面我列出来的内容,一些并不属于严格的技术领域。只要你能为你的雇主产生价值,你能够选择你喜欢的任何领域并进行深刻研究。

我认为,一个 Android 技术专家,至少有 2~3 个专业领域,例如,个人专业领域是:架构、单元测试、并发、依赖注入。我相信,在不久的未来,我可以将“重构祖传代码”添加个人专业技能列表里面。

因此,若是你有 4 年以上的经验,你的专业领域是什么?

总结

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

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

如今,若是你对 Android 生态系统的最新发展感到好奇,你能够阅读个人另外一篇文章 ,我总结了 2019 年末 Android 发展的情况。最后,我再重复一次,若是你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情作深度研究。

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

结尾

最后小编想说:不论之后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来讲,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提高本身,历来都是咱们去适应环境,而不是环境来适应咱们!

当程序员容易,当一个优秀的程序员是须要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每一个阶段都须要掌握不一样的能力。早早肯定本身的职业方向,才能在工做和能力提高中甩开同龄人。

想要拿高薪实现技术提高薪水获得质的飞跃。最快捷的方式,就是有人能够带着你一块儿分析,这样学习起来最为高效,因此为了你们可以顺利进阶中高级、架构师,我特意为你们准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了之后保证薪资上升一个台阶。(如下是一小部分,获取更多其余精讲进阶架构视频资料能够点击下面的小卡片获取)

当你有了学习线路,学习哪些内容,也知道之后的路怎么走了,理论看多了总要实践的。

如下是今天给你们分享的一些独家干货:
《Android架构视频+BAT面试专题PDF+学习笔记》

【Android开发核心知识点笔记】

webp

【Android思惟脑图(技能树)】

webp

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

webp

【Android高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!如今都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现现在市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破本身涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

webp

上述【高清技术脑图】以及【配套的架构技术PDF】点击:《Android架构视频+BAT面试专题PDF+学习笔记》
便可获取!

以为不错,记得点个关注,第一时间获取最新资讯和技术分享哦

相关文章
相关标签/搜索