目录
- 核心分析内容
- 1、学什么
- 1.1、Android基础 & 常用
- 1.2、Android进阶
- 1.3、与时俱进、热门技术
- 1.4、编程语言:Java与Java虚拟机
- 1.5、计算机基础
- 1.6、总结
- 2、怎么学
- 2.1、学习路径:如何循序渐进、阶段性的学习Android的理论知识?
- 2.2、获取途径:有哪些高效的方式获取Android理论知识?
- 2.3、学习方式:用什么方式记录?
- 2.4、总结
- 3、怎么应用Android知识?
- 3.1、该如何寻找项目?
- 3.2、如何将理论知识运用到项目中 & 提高项目的质量
- 具体执行建议
- 总结
核心分析内容
对于怎么学习Android,主要解决的是3个问题:学什么
、怎么学
& 怎么用
。
具体如下:
下面,我将带着上述几个问题,详细讲解自身学习Android的方法和Android学习路径。最后,还会结合前面内容,给出综合的具体执行学习Android的建议。
1、学什么
面向Android初、中级开发者,对于要学习的Android理论知识,我认为主要包括:
Android基础 & 常用
Android进阶
与时俱进、热门技术
编程语言
计算机基础
具体介绍如下:
1.1、Android基础 & 常用
针对Android基础&常用知识,按照优先级最主要的知识点主要包括:四大组件
、布局使用
、多线程
& 动画
。
具体介绍如下:
类型 | 简介 | 具体内容 |
---|---|---|
四大组件 | Android最基础、最常用的四个组件 | • 活动(Activity) • 广播(Broadcast) • 内容提供者(ContentProvider) • 服务(Service) |
布局使用 | 常用UI布局组件 | • 框架布局(FrameLayout) • 线性布局(LinearLayout) • 绝对布局(AbsoluteLayout) • 相对布局(RelativeLayout) • 表格布局(TableLayout) • 约束布局(ConstraintLayout) |
多线程 | 多线程操作、异步通信 | • Thread、Runnable • Handler • AsyncTask • IntentService • HandlerThread |
动画 | 实现UI中的动画效果 | • 补间动画 • 属性动画 • 帧动画 • 差值器 & 估值器 |
1.2、Android进阶
针对Android进阶知识,按照优先级最主要的知识点主要包括:自定义View
、性能优化
。
具体介绍如下:
类型 | 简介 | 具体内容 |
---|---|---|
自定义View | 自定义试图组件 & 动画 | • 自定义View流程(measure、layout、draw) • 时间分发机制 • 自定义动画 & 组件 |
性能优化 | 性能优化的目的是为了让应用程序App更快、更稳定 & 更省电 | • 内存优化 • 内存泄漏 • 绘制优化 • 布局优化 |
1.3、与时俱进、热门技术
除了基础日常使用的Android知识,我们还需时刻关注行业动态,与时俱进的学习新技术,如近些年来较为热门的Android新兴技术包括:Flutter
、热修复
、插件化
等;
同时,了解 & 学习常用的开源库也十分重要,常用的开源库主要包括 图片加载
、网络请求
、 异步处理
的开源库。
具体类型如下:
类型 | 简介 | 具体内容 |
---|---|---|
图片加载 | 加载显示图片 | • glide • fresco • picasso • Android-Universal-Image-Loader |
网络请求 | 与服务器快速实现网络请求 | • Retrofit • okhttp • volley |
异步处理 | 快速实现异步通信、响应式编程 | • RxJava • RxAndroid • RxBinding • EventBus |
1.4、编程语言:Java与Java虚拟机
Android是基于Java的,所以学习Java和Java虚拟机(JVM)十分重要。
学习Java不需要类似后端那么深入,我认为作为Android开发者,学习的内容包括:语言特性
、基础使用
、集合类
和机制
。
具体介绍如下:
类型 | 简介 | 具体内容 |
---|---|---|
语言特性 | Java特有的语法特性 | • 面向对象的3个特征与含义 • 多态的实现原理 • 基本数据类型、相关操作和封装类 • 4种引用:强、软、弱、虚 & 应用场景 |
基础使用 | Java常见的使用类/方法 | • 基本数据类型、相关操作和封装类 • Object类、String类、抽象类(Abstract) • Static关键字 • 接口(Interface) |
集合类 | Java中与集合相关的类 & 使用 | • Collection类、Arrays类 • List、Set、Queue、Stack、Map的特点与用法 • Vector、ArrayList、LinkedList的存储特性 & 区别 • Map相关:HashMap、LinkedHashMap、TreeMap、HashTable、ConcurrentHashMap |
机制 | Java特定机制的使用 | • 多线程:Thread与Runnable、ThreadLocal、线程池ThreadPool • 线程同步:sychronized、同步锁(sychronized) • 反射 • JNI • IO与NIO • 泛型 |
对于Java虚拟机(JVM),属于底层 & 原理性的内容,具体介绍 & 学习的内容包括:
1.5、计算机基础
除了学习Android特定技术外,对于程序员来说,最基本的计算机基础素养也十分重要的,主要包括 数据结构
、 算法
和 计算机网络
。
具体介绍如下:
类型 | 简介 | 具体内容 |
---|---|---|
数据结构 | 相互之间存在一种或多种关系的数据元素的集合 | • 线性表&特殊线性表(栈和队列) • 树、二叉树 • 串、字符串 • 图 • 查找 • 排序 |
算法 | 解决特定问题的求解步骤 | 对应每种数据结构的多种常见算法 |
计算机网络 | 网络通信相关 | • 计算机网络体系结构(5层 & 7层) • TCP / IP协议、UDP协议 • HTTP协议 • Socket |
1.6、总结
至此,关于入门Andriod需学习的内容讲解完毕,总结如下:
2、怎么学
对于怎么学习Android知识,此处分为3个子问题:
学习路径
:如何循序渐进、阶段性的学习Android的理论知识?获取途径
:有哪些高效的方式获取Android理论知识?学习方式
:用什么方式记录?怎么样去记录?
下面将具体介绍:
2.1、学习路径:如何循序渐进、阶段性的学习Android的理论知识?
- 既然已经知道要学习哪些内容了,下面,该解决的是:
学习路径,即什么阶段该学习什么内容
。 - 对于Android知识学习阶段,
我认为是和Android开发水平相结合的
,只要掌握了哪部分知识,就代表你处于Android开发的哪个阶段。 - 我将Android开发水平分为:
初、中、高 & 高级以上
。
具体对应的知识内容如下:
类型 | 定义 | 知识 & 能力范畴 | 特点 | 具体内容 |
---|---|---|---|---|
初级 | 最基础的Android知识 | • 定性认识:知识的了解 • 定量使用:知识的实际使用 | • 基础 • 广度 | • Android基础使用(如四大组件) • Android常见机制(如多线程、动画等) • Java • 编程通用:数据结构、算法、网络 |
中级 | 基础学习中更深一步的探索 | • 高级应用 • 源码分析 • 新技术的使用 | • 深度 • 与时俱进 | • 底层工作机制的原理 • 自定义View • 性能优化 • 热定技术:开源库、热修复、插件化 |
高级 | 专注于某一垂直领域(如音视频、性能优化) | 特定领域的知识深入 | • 某一垂直领域 • 机具深度 & 门槛 | 专注解决特定领域的技术问题 |
高级以上 | 技术专家 | 继续深入研究特定领域 | 更加深入某一垂直领域 | • 专注解决特定领域的技术问题 • 会产出 & 开源库 & 组件 |
高级以上 | 架构师 | 在更高的层面解决项目难点 / 业务问题 | 专注于整体技术架构 | • 技术架构设计 • 具体业务的解决方案 |
高级以上 | 管理层 | 面向团队、业务 & 产品 | 具备管理团队、统筹产品方向的属性 | • 管理能力 • 业务能力 • 产品能力 |
2.2、获取途径:有哪些高效的方式获取Android理论知识?
既然已经知道要学习哪些内容了,下面,我将列举一些学习这些理论知识的有效途径。
对于获取Android知识,我认为最有效的途径是:书籍
> 视频
> 技术博客
> 公众号
。
具体介绍如下:
类型 | 特点 | 应用场景 | 推荐 |
---|---|---|---|
书籍 | 具备完整知识体系、讲解全面的获取知识途径 | 成知识体系、循序渐进的学习 | • Android:《第二行代码》、《Android开发艺术探索》 • Java:《Java编程思想》 • JVM:《深入理解Java虚拟机》 • 数据结构:《大话数据结构》 • 算法:《剑指Offer》、Leetcode网站刷题 • 计算机网络:《计算机网络》(第五版) |
视频 | • 更加生动、清晰的讲解知识 & 实践 • 较大的缺点:耗费时间较长 | 学习难度较高的知识 | 在线学习网站对应的Android学习课程(极客学院 & 慕课网) |
技术博客 | 针对某个知识点进行讲解 | 目的性搜索、深入学习 | • 技术社区:CSDN、稀土掘金、简书 |
公众号 | 针对某个知识点进行讲解(由于镶嵌在微信,所以容易链接到外部更多的渠道) | 适合碎片化学习 | Android公众号 |
关于通过公众号的学习,本人的微信公众号:carson带你解析Android,希望能让大家系统的学习上述说的Android理论知识。
2.3、学习方式:用什么方式记录?
很多人看完书籍看完博客后当时很理解,但过一段时间就十分容易忘记。
所谓“好记性不如烂笔头”,我认为,最好的记录方式就是将学习到的知识记录下来,我强烈推荐:撰写技术博客。
对于技术博客的介绍如下:
撰写技术博客好处多多,主要包括:
好处 | 具体描述 |
---|---|
提高开发效率 | • 复杂使用的流程化:记录下繁杂的使用流程,下次再次使用时按部就班直接复用即可,常见的有:开源库的使用、某类需求的具体实现过程 • Bug的快速解决:记录下问题发生的场景 & 解决方案,不仅能避免重复采坑,就算采坑了也能快速解决 |
保证真正的掌握知识 | • 只有做到以下3步我才认为是真正掌握了知识:敲代码实现、清晰表达 & 让别人听懂 • 但大部分开发者都停留在第一步(敲代码实现),你得清楚明白:敲代码实现 & 用语言表达出来是两码事 • 所以在整个过程中是非常能锻炼自己的思维能力 & 表达能力 |
加深对知识的思考 | • 在写作过程中,你会不断思考知识的各个方面 为什么?因为如果思考的广度 & 深度不够,文章是没法继续写下去的 • 这大概也是很多人没法坚持下来的原因:因为牵一发而动全身,知识总是从1个点扩散到整个面的,最终需完成的文章内容远远超出你的想象 |
保证知识的正确性 | • 自己的认知能力有限,所以对知识的理解总有偏差 • 当分享出来博客后,良好的Android技术社区氛围能及时纠正你错误的理解,保证你的认知是正确的 |
当然,还有一些其他福利,如:
好处 | 具体描述 |
---|---|
提供影响力 | 当大量产出优质文章后,在Android领域的知名度 & 影响力就会提高、对自己在职场上的地位会有所帮助,这是一种莫大的荣誉感 |
结识人脉 | 相对其他职业来说,程序猿较为封闭,即对电脑多、面向人较少;通过博客、Github等这些公开渠道,能结识更多的开发者 |
知识共享 | Android与IOS其中一个较大区别 = 开源,作为一名Android开发者,应秉着谷歌、Android开源的精神,将有用的知识分享给大家、帮助更多的Android开发者 & 共同学习,推进整个Android技术圈的进步 |
2.4、总结
3、怎么应用Android知识?
- 理论结合实践、学以致用才能更好地获取知识,对于深入理解Android,最好的实践就是 将理论知识运用到Android项目中
- 所以,此处可以转化成两个问题:
- 该如何寻找项目?
- 如何将理论知识运用到项目中 & 提高项目的质量
下面我将详细回答这两个问题
3.1、该如何寻找项目?
此处我给出3个方向:
学校
:课程设计、社团组织公司
:实习、正职、创业技术社区
:开源项目
方向 | 具体 |
---|---|
学校 | • 课程设计:请认真对待大学专业对于你职业相关课程的大作业(如Java、Android、数据结构),因为它可能会成为你一个不可多得的项目经验 • 社团组织:多参与校内官方组织 & 社团组织,注重寻找具备校内影响力较大的产品的所属组织,因为在那里你能找到一个具备落地实践的开发经历 & 一群靠谱、能在职场上给予你很多帮助的开发团队 |
公司 | • 实习:如果你还是在校大学生,请安排好自己的大学上课时间,尝试出去公司参与拥有大量用户、真正的项目,特别是知名公司,对于在校大学生来说,这部分项目经历是含金量的提高。 • 正职:如果你已经是正职员工,那么做好手头上的项目是你实践最好的方式。 • 创业:这是能最大程度锻炼你全方面的能力,含:技术专业能力 & 基础能力;但这是一个可遇不可求的机会:找到靠谱的团队 & 有前景的方向,若有这样的机会,个人非常建议去尝试;假设最后能拿到投资,含金量是非常非常高、最能锻炼人的。 |
技术社区 | • 来源:自己的项目、当前技术热点/开源库、仿照主流的app; • 内容:完整App、某个功能模块、UI组件等; • 开源处:主流技术社区 = Github、CSDN、稀土掘金、简书 |
3.2、如何将理论知识运用到项目中 & 提高项目的质量
我认为,**项目中的所有功能 & 业务实现都是基于上述说的Android知识的,关键是在于:**是否能选择对的知识点 & 组合实现思路。
提高项目质量,即提高项目含金量、增加技术含量 & 亮点,下面主要是从项目**本身的意义
、实现方式
、性能优化
** & 影响力
4个方面
类型 | 具体 | 备注 |
---|---|---|
意义 | 尽可能的让自己的项目使用的技术往学习到的知识点靠拢 | |
实现方式 | • 具备一定的技术难点 & 技术技巧,而不是简单实现 • 如:使用了某种新技术、新的开源库 | 若无难点,要学会自己去制造难点 |
性能优化 | 对项目在性能上提出要求 & 提出解决方案 | 与同类项目、一般要求的区别开来 |
影响力 | 尽可能让项目可落地 & 具备一定的用户基数; • 具备一定的影响力 & 知名度 |
具体执行建议
个人认为最高效的执行方式是:以做项目为主、知识体系学习为辅,将技术博客作为一种学习的方式。
具体理解的是:
总结
至此,关于我对Android学习内容、方向 & 具体实践方式 讲解到这里,此处作个简单总结:
凭借这样的学习方式,有幸获得腾讯、阿里巴巴、今日头条等Android客户端offer,所以,我将自己的一套Android学习方式总结出来分享给大家,希望各位也能获得心仪的offer!