在腾讯从事Android开发工作,到今年已经有十年了。今天停下来回答这个问题,其实我还是有点虚的、这些年的时间光带项目去了,对Android基础技术的资料没有以前看的那么勤了;
不过对于Android开发该如何学习—进阶—实战?我想我这个Android老人还是有点个人经验的!
接下来我们看看Android开发从初级到实战是学习什么东西?
一、从自身规划的角度讲,技术上的学习分如下几个阶段:
1、做好业务需求的功能。这个是初级程序员就应该有的能力,俗称面向百度编程
2、解决极端情况下的技术问题,比如性能优化,OOM等。稍有点规模的公司,肯定都会遇到这种问题,比如上文中说的App在部分机型上崩溃、页面加载不出来等。只是大部分程序员会觉得难以复现,或者是因为小概率事件而忽略了。
在忽略这些问题的过程中,也放弃了进一步提升的可能性。还有一部分程序员是看到了这些问题,但一直不知道怎么解决,因为这些问题的产生基本都是要往底层框架去找原因,而平时只关注上层的业务逻辑代码,因而没有深入研究底层的原理,导致心有余而力不足。
3、在开发框架和效率上做文章:举个例子,很多程序员说自己的精力都在和产品的撕逼中浪费了,但有没有想过,能够通过技术手段将自己从繁杂的无技术含量的工作中解救出来?
比如是否能够做到只编写一次代码,或者改个配置参数就能够做到在不同平台上运行。更高的要求是,能否将这些方案做成通用框架或产品。
二、初级Android程序员需要具备怎样的能力?
-
有良好的JAVA基础,熟练掌握面向对象思想。
-
熟练掌握UI设计、常用布局、动画特效。
-
熟练Android四大组件(Activity、Service、ContentProvider、BroadcastReceiver)
-
熟练Android数据存储(文件、网络、SharedPreferences、SQLite、ContentProvider)
-
熟练Android 平台下XML和JSON解析
-
熟悉图片的缓存技术,并且能够对图片的优化进行相应的处理。
-
掌握OOM异常的处理,并可以对应用进行相应的优化。
-
熟练Android下的自定义控件的使用,具备开发自定义控件的能力
-
熟练掌握ListView的优化及异步任务加载网络数据。
-
熟悉掌握各种常见的设计模式。
-
熟练使用Handler以及AsyncTask异步框架。
-
有一定的屏幕适配经验。
-
熟练运用AIDL远程调用。
-
熟悉UML设计,可以设计程序的用例图、类图、活动图等。
-
熟悉Android系统下消息推送机制。
-
对Android底层有一定的认识,研究过相关的Android源码。
-
熟悉Android的JNI/NDK 开发。
-
掌握常用的Android 开源框架
用两小时,做出来的@“Android知识学习导图”+开发十年,收录整理的@Android初级开发核心知识汇总[email protected]道高频大厂面试题及参考答案,均免费分享,可供参考。
————需要的朋友,这里是(免费打包领取地址)
Android知识学习思维导图
Android核心知识汇总
Android500道高频大厂面试题
参考答案
三、Android初级开发该怎么学习?
怎样做可以让初学者觉得编程是容易学的?还是有趣的?显然二者必须要兼得,那自然就是得到一些能快速看到结果的反馈,自己写的程序能立刻运转起来并实现一些效果,是非常鼓舞人心的。
因此这个阶段的第一目的是通过学习能真正动手写两个程序,并能得到快速反馈,并推荐一些相对简单的书籍
Java初级入门推荐书籍:《Head First Java》,《Java从入门到精通》
《Head First Java》不用多说,业界公认的Java入门佳作,如果你的编程底子非常薄,可以通过这本书快速学习Java。
image
而对于这本《Java从入门到精通》,也许很多人嗤之以鼻,觉得是只教表面,不深挖原理的浅薄书籍,没必要看。
但是这本书的好处在于,当你完全没接触过编程,没接触过计算机知识的时候,这本书是可以带你快速上道的,它不仅仅只教如何使用Java语言,它连如何搭建开发环境这种对于出入门的人来说非常头痛的事都有详细教程。
因此,它对于刚刚入门的人来说,是非常友好的。
image
如果,你没有任何编程经验,但想从Java入门编程,这本书是非常好的。理论上来说,这两本书选一本阅读即可
Android初级入门推荐书籍:《第一行代码》
如果要开始这一阶段,请务必把Java初级阶段入门完成后再尝试。那怎样算是完成呢?
起码用书中的知识自己写过Demo,并且测试成功。
例如,最基本的Java知识,包括:继承,接口,字符串,内部类,匿名类,集合,简单的多线程,Socket网络通讯等等都有过亲自的实践,第一阶段就算是完成了,你说反射,泛型,多线程,注解等知识你没办法理解?
没有关系,这些都是第二阶段攻克的主要目标之一。
至于第一行代码这本书,已经无需我废话,这在中国基本已经成了Android入门的标准教材,书中涵盖了Android开发知识的方方面面,例如如何搭建Android开发环境,Android四大组件的使用,Android网络通信的基础,如何使用开源库,如何使用Git,如何进行本地存储等等。只要跟着这本书,把书中的每一个Demo都自己手动实现一遍,并在学习完本书后,自己试着综合所有已学的知识开发一个能自己玩的小app,第一个大阶段——入门,就算彻底结束了。
四、进阶:持续攀登技术之峰
如果你已经完成了第一阶段,并且已经小有自信来到了这里,那么恭喜你找到一份Android基础开发工作算是没问题了!
但是如果你想更上一层、让职业发展更长远,那我要说你现在学的还不够,进阶阶段可能会让你扫兴,因为进阶阶段的学习量可能是入门阶段的数倍,甚至上10倍;
但是,既然已经走到这里来了,自然不能放弃。
1、Android开发进阶,以及设计模式的学习
推荐书籍:《Android开发艺术探索》,《Android源码设计模式解析与实战》
学习完《第一行代码》后,你可能会使用Android SDK中提供的许多类库来开发Android应用了。
但是,只会使用是远远不够的,我们必须掌握它们的运行机制和原理,以及我们还应该学习自定义一些类似与系统提供的组件的工具(例如自定义View),学习这些知识,以上两本书再好不过了。
它们对于这部分知识的讲解可以说是相辅相成的,这两本书同样是需要花大力气去阅读的,当这两本书被你彻底吃透
那么,恭喜你1到3年经验的Android面试中,你基本已经可以拿下全部和Android有关的问题了
《Android源码设计模式解析与实战》不仅讲了Android源码,更精讲了各种设计模式,学完这本书可以说是一举两得,又能学习源码,又能系统的学习设计模式,是非常值得Android开发人员观赏的一本好书。
五、实战环节
当你第3阶段完成以后,实际上就可以将这第5阶段和第4阶段并行执行了,这部分的知识绝大部分是书籍中所没有的,因此需要结合网上的博客文章和自己的大量动手实践来学习。
首先,你已经在《第一行代码》中见过几种开源库了,现在,为了高效开发Android应用,我们应该学习以下几类主流Android开源库的用法和原理,如下所示:
-
网络请求(Retrofit2)
-
图片加载(Glide/Fresco)
-
事件总线(EventBus/Otto)
-
异步操作(RxJava2)
-
依赖注入(ButterKnife/Dagger2)
括号中列出的是该类开源库中的代表作,有些种类我列出了两个,但是初学的时候只需要挑一个学习就可以了。
当然,开源库的种类远不如这些,还有例如数据库操作,图片选择器,大图查看器等许多种类,但是这些库用到的频率并不及以上五种,以上五种开源库几乎可以说是在任何app中都要使用到的,学会它们无论是对你开发应用的效率还是应付公司面试都颇为有用。
学习开源库的方法主要是先在网上找到一篇靠谱的文章简单读读,如果你英文好的话也可以直接去它们的项目主页去读英文文档;
然后把它们的简单示例写个demo或者直接用在你正在开发的个人项目中,用上去以后再根据代码,仔细研读解析的文章或文档,然后修改这些代码,尝试些高级用法。
等你闭着眼睛都能在脑中默念出这些库的使用流程的时候,就可以再找一些深入分析的文章或者亲自去看它们的源码来学习它们的原理;
学习原理是非常重要的,特别是在大公司的面试中,考察你是否理解你使用的库的原理也是相当重要的一个环节。
到这里Android开发相关的基础理论知识就已经大致学习完了,这一节既然叫实战环节,那么你大量的编码量是少不了的,作为一个初涉编程的学习者,每天都保证一定的代码量或技术书籍的阅读量是少不了的,只有持之以恒的大量练习,解决实际开发中的大量问题,技术才能真正的快速提高。
六、最后的想法
最后说一点对跨平台开发看法,这两年 Flutter 兴起,跨平台又一次被人提及,相比之下,我觉得 Flutter 确实比原先的 RN 等开发框架优秀许多,会是未来一个趋势,如果感兴趣且有时间,学习一下 Flutter 挺不错的。
但是我从来不认为跨平台和原生开发是互相取代的关系,它们是相辅相成的,如果你是掌握了跨平台开发技能的 Android 工程师,这将是你非常大的一个竞争力的体现;
但是如果只会跨平台开发的话,我觉得基础知识还是有所欠缺的,所以还是要分清主次,在学有余力的情况下再去了解跨平台开发
————需要文章上方分享全部资料的朋友,这里是(免费打包领取地址)