以前有人在朋友圈评论我说,如今学习Android 遇到了瓶颈,基本上通常的API,市面上大部分App UI 都能作出来,该怎么提升?而后我回复他了,我学习Android 也有一年左右,也是个菜鸟,也遇到这样的问题,因此就各类查资料,看看大神们都在研究什么技术,也跟着学习学习。当初在逛知乎看到了一些问题(PS:逛知乎仍是颇有好处的嘛!!!),看到不少回答就以为很受启发,还有看别人的博客,也很受用,想要写一篇文章的想法,等了一两周才开始动手。 html
新手学习遇到瓶颈 java
我以为新手作的更可能是重复的工做,可能接触好的项目,前一两个月会以为学到好的东西,可是随着公司的东西慢慢熟悉,也就变成日复一日的重复劳动,而后慢慢感受也就学习遇到了瓶颈,而一些太难的东西又不太情愿去琢磨,好比读Android 源码,你使用Handler Loopeer 感受很巧妙,能够仔细研究一下;还有就是不少第三方开源库你使用起来很方便,若是这个时候你仔细阅读源码,也必定能感觉它的设计的巧妙。所以,我多方搜集,整理出来了如下几条,有必定经验接下来要作的事。 android
解决问题的能力。可能老手的遇到的Bug 可能比你写的代码都多。 git
阅读和理解源码。新手可能就是使用API,而老手会去阅读源码,理解开源项目或者Android 系统的源码,理解他们的架构。 程序员
深刻理解Java 和Android 。Android 应用层的东西基本上基于Java,想要写好Android,Java 已经要过关。 github
了解编译原理等CS基本知识。我以为这一条是每一个程序员应该必备的。好比像计算机网络(HTTP,TCP/IP),算法与数据结构。
下面我会分别按照这几点给你们详细讲解(实际上是来看看大牛们的演讲)。 面试
解决问题的能力 算法
我以为这个我没有能力回答,不过以前有幸听过一个演讲,@阿拉神农 邓凡平老师在北京GDG DevFest 的一个演讲,说过你进入一个项目组,不要害怕问题和Bug,你把不少问题解决了,你的技术也会上升到一个层次。邓老师在文中也提到了怎么学,学到什么程度,以及学什么,还专门提到多线程,网络(HTTP,TCP/IP)编程,设计模式这些基础东西,就算Android 有一天不行了,这些东西也同样会被吸取借鉴的。
关于演讲的内容:《Android开发进阶之旅》
http://weibo.com/1826440077/D36AAiF2G。 编程
注:邓老师从事软件开发有十余年,以前是作底层开发,如今在作应用层的开发,他也是《深刻理解Android》系列书籍的主要做者之一。 设计模式
阅读和理解源码
这个问题我也没有多大能力去回答,也读过一些开源库的源码,像Retrofit,Volley,还有像Handler Loopeer 的机制,其余的虽然阅读过,可是没有理解太深,这也是我之后努力的方向。还有人问问什么要读源码,我想说,若是你写写XML 布局文件,会用用API,一个实习生两三个月就和你差很少了,你还有什么资历说你颇有经验,知其然知其因此然说的就是这样的意思,阅读和理解源码让你更好使用API,解决问题的能力也大有提升,也有了造轮子的能力。固然了跳槽面试的时候也能够吹牛逼了。下面的两篇文章是Kaede 的博客上两篇文章,他也有本身的知乎专栏——《中二病也要开发Android》。Kaede 在文中阐述了,为何要阅读Android 源码,以及该怎么读,还有要读哪些,对于源码接触不太多的同窗有个参考,也推荐一些大牛的博客,站在巨人的肩上,有了前人的参考,也会事倍功半的。
有没有必要阅读Android源码
http://kaedea.com/2016/02/08/android-about-source-code/
阅读Android源码的一些姿式
http://kaedea.com/2016/02/09/android-about-source-code-how-to-read/
深刻理解Java
Java语言相对来讲比C++ 简单不少,可是对于常常写业务代码的人,对于如何写出优雅的java代码以及如何辨别垃圾代码,还有Java的内存模型/GC,并发机制,虚拟机执行流程确定不甚了解,所以,这个阶段,我打算大体搞清楚Java语言自己,顺便从这个角度切入编程语言自己;主要以下:学习如何写更好的Java 代码,《Effective Java》值得一读。
什么样的Java 代码是有问题的?《Java解惑》;怎么改写代码?《重构》
学习一些没有接触过的Java 高级库,NIO/AIO, concurrent/forkjoin等,有机会使用到工做过程当中。
了解Java 虚拟机 《深刻理解Java 虚拟机》《实战Java 虚拟机》;从这里,能够知道不少JVM 的运行原理,内存模型,class 文件格式,Java 并发原理,虚拟机执行引擎等至关多的东西;虽说Android 的虚拟机Dalvik 和ART(ART 也许称不上虚拟机)使用的不是标准的HotSpot 可是,我相信原理都差很少。
可是,Java平台的技术栈远非这么一点,学无止境;走到这一步,我以为对于Java语言已经算得上掌握了,因而主要目标转向编程语言自己。
深刻Android
这一块有不少人分享过经验,其实无非那么几点,我就简单重申一下吧。
IPC机制,Binder和匿名共享内存等
四大组件启动,工做原理
View系统,绘制原理,事件分发
动画框架,原理
多线程机制,消息机制 AsyncTask,Thread/Handler
系统启动过程,system_server启动过程
Window系统,Window建立过程
资源管理系统,资源加载机制等
《Android 开发艺术探索》这本书确实不错,适合中级程序员。我的感受《Android 内核剖析》挺不错的,虽然有点过期了也买不到书了。 《Android 源码设计模式》,在Android 的源码中都有什么使用哪些设计模式,也让你更深刻去理解源码。
当你搞清楚了这些,基本上你写的什么代码在Android 上层是怎么运做的都了然于胸;FrameWork 层的任何问题也拦不住你的脚步了;不过这个阶段,仅仅是了解了Android 系统Framework 层的原理,对于怎么写代码,对于语言自己,对于Android 系统底层的原理依然很迷惑,没事,已经看到了光了,一步一步来。
除了Android 源码值得读的,还有第三方的开源库也是值得一读的,有的开源库甚至比官方的更加好用,好比像咱们经常使用的Retrofit,OkHttp,Picasso,Volley,EventBus,Dagger,咱们基本上都能熟悉使用,Trinea 和一些大牛在Github 作的一个项目,专门分析了开源项目,咱们能够参考着来看。
android-cn/android-open-project-analysis
https://github.com/android-cn/android-open-project-analysis
我以为新手阅读源码的姿式仍是有点弱,固然站在巨人的肩膀就会事半功倍,因此看看大牛写的文章仍是很~(≧▽≦)/~涨姿式的。
了解编译原理等CS基本知识
推荐一下R 大的书单吧: http://zhuanlan.zhihu.com/hllvm/20130808。 固然因为定位不同,我确定不会像他同样专门搞搞基语言虚拟机(主要是我没那个水平!),仅供参考;我本身目前看的几本书以下:《编程语言实现模式》《深刻理解计算机系统》《SICP》《编译器设计》;而后因为在学Haskell,因此在追github上一个项目,sdiehl/write-you-a-haskell ;具体怎么作仍是边走边瞧。
后面的我也不敢说太多,目前打算是但愿深刻了解Linux内核,之前看过《深度探索Linux 操做系统:系统构建和原理解析》;打算看《深刻Linux内核》《Unix环境高级编程》;只要越过了浮躁期,其实目标仍是很明确的;知道本身该学习什么,也知道大体该怎么作;感受本身走在正确的路上,愈来愈接近那个目标,天天都充满但愿。
参考
Android开发高手进阶教程
http://blog.csdn.net/column/details/androiddept.html
怎样的Android开发毕业生能够算达到优秀的水平?
https://www.zhihu.com/question/39009692
android学习路线:如何成长为高级工程师
http://blog.csdn.net/singwhatiwanna/article/details/42343847
android-cn/android-open-project-analysis
https://github.com/android-cn/android-open-project-analysis/
本文部分章节参考来自weishu 在知乎上面的回答,若是你以为本文不错,也能够点击连接能够给打点个赞,在这里多谢了。
Android 程序猿如何继续深刻的研究技术层的知识? - weishu 的回答 - 知乎
https://www.zhihu.com/question/37549641/answer/83217748
本篇文章可以完成,参考了weishu,邓凡平老师,kaedea,Trinea,固然也看了不少博客,在这里特别感谢他们,本人资历尚且有限,写过过程当中不免会有疏漏,还请见谅。