前言前端
移动研发火热不停,愈来愈多人开始学习android开发。但不少人感受入门容易成长很难,对将来比较迷茫,不知道本身技能该怎么提高,到达下一阶段须要补充哪些内容。市面上也可能是谈论知识图谱,缺乏体系和成长节奏感,特此编写一份android研发进阶之路,但愿能对你们有所帮助。vue
这篇文章里,咱们只谈技术,不谈软技能。java
在这里我把攻城狮分红初级、中级、高级和资深四个阶段,分别对研发设计能力、工具使用、系统原理和架构等做出要求。react
初级android
我对初级研发攻城狮的定义是掌握基础的android知识,可以独立完成一个功能。这个层级大部分人经过看一些资料书籍再通过项目练习很快能够达到。git
须要的技能有:数据库
掌握android 四大组件知识,深刻了解相关生命周期;对于Application、Fragment、Intent也必须掌握。小程序
掌握android 基本布局和控件的属性和使用,经常使用布局有LinearLayout\RelativeLayout\ConstraintLayout等,控件有TextView\ImageView\RecyclerView\ScrollView等。后端
对android的资源访问使用有基本了解,了解android针对不一样国家、语言、屏幕、API的适配原理。设计模式
掌握android系统服务和工具类的使用,对网络访问和数据库操做有基本认知。
熟练掌握研发工具,如IDE、模拟器、网络代理、日志等。
中级
而到达中级就须要付出一些努力了,须要了解更多知识,能够仿照开源库去造轮子练习。中级工程师要可以熟练完成功能研发。须要的技能有:
熟悉SOLID基础设计原则,掌握23种设计模式。
对于研发语言特性java/kotlin有深刻理解,如反射、动态代理、apt等。
对android架构有基础了解,对apk结构和打包原理有深刻了解。
对于android各个版本特性有基本了解,如MD设计、权限管理、doze模式等。
熟练掌握各类研发调试工具,如git、gradle、mat、layout inspector等。
掌握Handler\AsyncTask原理,熟悉多线程开发。
对绘页面制原理有初步理解,可以实现一个复杂自定义控件。
可以熟练掌握开源库的使用,如图片库(Glide\Fresco)、网络库(Volley\okhttp\Retrofit)、工具(Dagger\RxJava\EventBus)等。
熟悉图片优化经常使用方法,避免编写内存泄漏的代码。
高级
若是到达中级,那么恭喜你已经能够应付大部分状况了。但要能更进一步,就须要深刻理解android系统的运行原理,达到融会贯通,能够做为android端上的架构师。
掌握java高级特性,如JUC、线程池、NIO\BIO等;掌握jvm虚拟机知识,如内存模型、GC原理、类加载机制、线程模型等。
对android运行环境有深刻理解,理解android沙盒机制,掌握AIDL原理及Binder通讯原理,了解app和activity启动原理。
掌握热修复原理,各大厂商方案的优缺点。
对于android事件分发有深刻理解,重点掌握触摸事件机制。
深刻理解android绘制原理,理解VSYNC和surface机制和窗口原理。
深刻理解android动画原理,包括补间动画和属性动画。
对于android安全机制有基本认知,理解android安全原理。
深刻理解端上设计范式思想,如mvc\mvp\mvvm\clean-arch等。
理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。
对新技术敏感,理解掌握下一代架构dynamic feature等。
至此,android端研发你已经炉火纯青,可以面对各类状况,达到泰山崩于前而色不变的境界。若是还想继续前进,就须要突破技术栈,从更高架构层次考虑问题。
资深
而到了资深层次,技术栈已经再也不是阻碍。可以从更高层面看待问题,理解整个系统的设计,做为系统架构师的角色存在。
理解微服务、SOA思想,对于后端开发有必定涉猎。
了解前端研发工具和思想,知道vue react等研发框架。
深刻理解跨端技术,如phonegap、weex/RN flutter、小程序快应用等。
后记
但愿你能对照上面的知识图谱,彼此印证查缺补漏,不断在技术道路上前行。有什么疑问和建议欢迎一块儿探讨。