曾听过很多人说 Android 学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作。这种观点可能是很多Android开发者最开始入行的原因之一。
在工作初期,工作主要是按照业务需求实现App页面的功能,按照设计师的设计稿实现页面的效果。
在实现的过程中,总是会被提如下的需求:
这个字能不能大点或者醒目点儿?
感觉颜色和设计稿有差别,能不能再调调?
怎么老是崩溃啊,行不行啊?
所以,工作过一年后你会发现,自己的工作重点就是将找各种各样的组件、框架,拖拖拽拽,改改样式。在极端情况下出现了问题后(比如部分机型上崩溃,加载图片慢),也不知道该如何解决!都不好意思说自己是搞技术的。
造成这种局面的有两种原因:
1.所开发的App功能要求并不复杂,在性能上呢,也不需要极致的追求;
2.自己的意识不够,不知道如何从平凡的工作中提炼可优化的点,在向上提升方面也没有完整的规划。
从自身规划的角度讲,技术上的进阶分如下几个阶段:
1.做好业务需求的功能。这个是初级程序员就应该有的能力。
2.解决极端情况下的技术问题,比如性能优化,OOM等。
稍有点规模的公司,肯定都会遇到这种问题,比如上文中说的App在部分机型上崩溃、页面加载不出来等。
只是大部分程序员会觉得难以复现,或者是因为小概率事件而忽略了。
在忽略这些问题的过程中,也放弃了进一步提升的可能性。还有一部分程序员是看到了这些问题,但一直不知道怎么解决,因为这些问题的产生基本都是要往底层框架去找原因,而平时只关注上层的业务逻辑代码,因而没有深入研究底层的原理,导致心有余而力不足。
3.在开发框架和效率上做文章。
举个例子,很多程序员说自己的精力都在和产品的撕逼中浪费了,但有没有想过,能够通过技术手段将自己从繁杂的无技术含量的工作中解救出来?
比如是否能够做到只编写一次代码,或者改个配置参数就能够做到在不同平台上运行。更高的要求是,能否将这些方案做成通用框架或产品。
上面列举的几个阶段,首先要从思考方式上去逼迫自己不断地逼迫自己,不要偷懒。其次,要想按照上述阶段发展,还需要落在实处,在具体的技术体系中不断的学习。
直到2020年还会有人带节奏:
Android开发已经凉了吗?
Android开发现状怎么样?
2020年的Android开发前景如何?
不是Android凉了,是你凉了,是你为自己的能力不足找的借口!
这几年有很多人有这方面的疑惑,在大方向讲,任何一个行业都有有一个成长周期
Android经历了2011-13年的野蛮生长后,已经进入了成熟期
这个阶段绝大部分企业对Android岗位的需求回归“理性”,不是懂一点Android基础就能找到工作的年代,这时候再从0起步可能比较晚,但Android市场却普遍缺乏高级人才。
目前Android市场上初中级的工资6K到18K不等,高级大概在20K-60K,15薪—18薪
刚在招聘网站上搜索的两则实时招聘信息:
很多朋友初中级开发者卡在20K这个门槛始终迈不过去,想要学习又不知道该怎么着手,大多从做上层应用开始,到做 Framework 层就浅尝辄止。
那么,作为Android 开发者,该怎样规划自己的学习路线,然后一步一个脚印的向中高级进阶呢?接下来根据自己的一些见解梳理一下。
首先,Java作为Android开发的第一语言(Kotlin普及还需要时间),要想在Android开发中游刃有余,就得先打牢Java基础,Java 基础有哪些呢?除了一些基本的语法之外,总结了如下一些基础:
**1 . 面向对象的三大特性:**Java 作为面向对象编程语言,你得知道OOP的的三大特性封装、继承、多态。
2 . 程序设计的6大原则:
了解这6大设计原则是非常有必要的,它能指导你的程序整个结构的设计和规范。要想提高你的代码质量,请熟记这几个原则。在我们设计类、方法、接口的时候,请遵循这些原则。
3 . 设计模式
23种设计模式就不一一列举了,不管你是工作了5年还是工作了1年,学习一下设计模式吧,这有助于打开你的编程思维。
4 . Java 字符串相关
Java 字符串相关的三个类:String、StringBuilder、StringBuffer ,你知道他们的区别吗?这也是面试中比较常问的,如果你还不知道?那就去查查资料吧。
5 . Java 线程池
线程池方面,JDK 为我们内置了几种线程池:
如果默认的几种线程池还不能满足你的需求,那就试一试自定义线程池吧!自定义线程池继承ThreadPoolExecutor。
6 . Java 集合
集合是Java中用得最多的了吧,你也面试的必问题之一,对于Java集合,你的脑袋里要熟记它的整个框架图:
Collection
(1) List:
(2) Set
Map:
我们需要知道每个容器的特性,以及它们的扩容方式(这个很重要)。根据我们的数据大小、特定场景、业务逻辑来选择合适的容器。
7 . Java 内存模型
Java 内存模型这一块非常重要,因为它涉及到我们程序的性能,我们需要知道,内存是如何分配的,成员变量、静态变量、局部变量、对象等各自分配到哪一个区:
垃圾回收机制:
涉及到内存,我们就需要知道java的垃圾回收机制,虽然Java 不像c++一样需要我们自己分配内存、释放内存。但是我们还是需要知道它的回收机制,分代回收:
分代回收分为了三个代,每个代的垃圾回收时机和频率是不一样的,因此采用的回收算法也不一样。
总的来说:年轻代的回收频率很高,对象的生命周期比较短暂,当经过一定次数的回收周期之后,年轻代的对象还存活的话,就会被移动到年老代,年老代的回收比较耗时,回收频率较低,回收成本较大。
Java 基础总结:关于Java基础暂时就总结了这些,这些都是Android
开发中比较常用或者常常需要关心的一些东西。如果你想比较系统的学习Java基础相关的东西,推荐你去看一下经典书籍《Thinking in
Java》。
就像建造房屋一样,要建造一座宏伟的建筑,首先得打牢根基。同样的,作为Android 开发者,要想走的更远,也要学好Android基础。
1 . Android 四大组件
Android四大组件是Android的根本,从我们学习Android 时候,就先认识了它们:
Activity:
Activity 再熟悉不过了吧,我们APP 所能看到的活动界面就是一个个Activity,说到Activity,我们得知道:
Service:
Service 也是我们用得比较多的一个组件,关于Service ,我们需要知道:
BroadcastReceiver:
广播相关的知识点:广播有两种注册方式,Manifest 清单文件中注册和 代码中动态注册,代码中注册的广播一般为局部广播,最好 register 和 unRegister 成对出现,别忘了反注册。
全局广播可以跨应用访问,存在安全隐患并且效率不高,因此出现了更安全、更高效的替代者:LocalBroadcastReceiver,使用非常简单。如果在代码中看到的是LocalBroadcastReceiver而不是BroadCastReceiver,我会给你加分。
ContentProviderContentProvider 可能用得不是很多,可以用于共享数据,提供数据源,掌握会写增删改查就好了。
啰嗦一下:四大组件需要在清单文件中声明。
2 . Android 常用的几种布局
3.Android Studio
Android Studio 是我们Android开发的常用工具,熟练操作和使用上面的快捷键和一些插件,对我们的开发效率有很大的帮助。
Android Studio 有很多好用的插件,可以根据自己的需要安装,如:
除了一些好用的插件之外,还可以根据自己的习惯设置一些快捷键,总之,工欲善其事,必先利其器。要提高开发效果,先配置好我们的开发工具。
4 . Fragment
5 . 数据库相关
Android 自带数据库 Sqlite, 关于数据库,我们应该熟悉:
6 . 常用控件基础控件
RecyclerView & ListView
ViewPager
TextView
ImageView
Button
Checkbox
RadioButton
所有复杂的界面都由这些简单的基础控件组成,因此,你需要好好了解一下他们的各种属性。
上面列举了一些Android的基础知识点,仅仅熟悉这些还不够,还需要学习Android开发中更高级一点的东西:
1 . View
上面列举了一些基础的View和控件,但是这些基础控件有时候不能满足我们的需求,这时候就需要自定义View了。
自定义View:
自定义view 的三种方式:
执行顺序为:onMeasure()->onLayout() -> onDraw()。
View事件分发机制:
自定义view 的时候,我们需要响应用户的各种事件,这个时候我们就需要了解View的事件分发机制了。
当这几个方法都调用super 的时候,整个事件会走完这个U型图。事件分发机制这一块还是比较难理解的,更多详解请查资料。
App 的几种架构
常见的三种架构,根据自己的业务需要选择,每种架构都有自己的优点和缺点,另外,我觉得一个APP 中,多种架构是可以并存的,比如:MVC和 MVP 。一个非常简单的展示界面,不必为它弄一个 P 层,反而变得复杂了。
3 . Android 动画
(1) Android 中的5种基础动画
(2) 属性动画
补间动画很简单,但是它的场景使用很有限,它只能对一个View做动画。有的时候,我们需要更为精准的控制,我们要控制一个属性来做动画,这个时候属性动画就派上用场了。属性动画的几个相关类:
属性动画用得就比较广泛了,属性动画 + 自定义View 配置 Path和贝塞尔曲线 能做出很多复杂的漂亮的效果。
(3)矢量动画
矢量动画大家可能比较陌生,Android Studio 支持将一个Svg 文件导入生成一个path 路径,用VectorDrawable 和AnimatedVectorDrawable 来实现矢量动画。但是需要在Android5.0 以上。
4 . Material Design 系列
Android 5.0 开始,Google 推出了 Material Design 设计规范,Android support 包中也加入了符合Material Design 设计规范的各种控件:
(1),BottomSheetBehavior
(2), BottomSheetDialog
(3),SwipeDismissBehavior
(4), 自定义Behavior
利用这些控件,可以做出很多符合material Design 设计规范的效果和动画。
5 . Android 多媒体
多媒体相关也是Android 开发中比较重要并且较难的一块了,它涉及到相机、视频、音频相关的开发。
相机开发:
1、使用自带的相机APP 拍照 2、系统相册选择照片 3、系统相机或相册获取的照片裁剪
4、使用相机API 开发相机:(1)、Android 5.0 (API 21 )以下 使用Camera API (2) 、Android 5.0 以上使用 Camera2 API 5 、自定义相册开发 6 、自定义裁剪界面
Android视频开发:
(1)、视频播放
MediaPlayer
VideoView(2)、视频编解码
音频开发:
AudioPlayer
音乐播放器
音视频开发这一块门槛较高,但是这也是比较吃香的一个领域,把这一块吃透了,你的优势就很大了,现在的直播这么火,对于这一块的需求还是比较大的。
6 . Git
Git 版本控制 也是我们常用的,熟悉各种Git 命令。对于代码的提交、代码拉取,历史版本的查看等Android Studio 已经集成好了,但是还是推荐大家日常用命令行方式操作,这样有助于我们熟悉各种Git 命令。
7. Android 权限适配
Android 6.0 以上权限适配。
8 . Gradle
以上就是Android 相关的一些知识点。
Github 绝对是我们程序员的宝贵财富,上面有各种各样的开源库,只有你想不到的,没有你找不到的。各大公司也有各种各样的开源的解决方案。
以下是比较流行的一些框架:
图片加载框架:
网络相关框架:
RxJava :
数据库方面:
上面都是当前流行的一些框架。尤其是RxJava , 当你看到Github 上各种各样的 RXxxx 时,你就明白RxJava 有多火。(加个Rx感觉逼格都高了一档)。
如果你觉得Java 基础、Android 基础这些东西都学得差不多了,整明白了。那么应该学习这些框架了,我们该怎么学习呢?不仅仅是学习怎么使用,我们可以去学习源码,学习他们的整个框架的设计思路、代码规范。对于部分功能可以仿照着写一个相同的。比如:缓存,图片加载框架都是多级缓存的,我们可以看一下每个框架的缓存实现有何不同,各有什么优缺点,最后仿写一个,把它变成我们自己的。
当我们有了一定的积累之后,试着去造轮子吧。可以是一个简单的View、炫酷的动画效果、一个常用的组件抽取。把这些常用的功能封装成一个库。当以后实现相似的功能的时候,我们就可以避免重复搬砖了。
如果条件允许,我们还可以将它开源到Github,有利于他人学习和使用,开源是一件利人利己的事。对于他人而言:可以借鉴思路、或者在项目中直接使用。对于自己而言:使用者发现bug反馈给我们,修复bug、升级版本,本身也是一个提升自己的机会。同时还能相互之间交流,吸取经验。
如果你还没有开始写一个开源库,那么现在就尝试着写一个吧。
你现在就可以看看你所做的项目,里面是不是有一个 utils 包 ?不用看了,肯定有,里面有你使用的各种各样的工具类。
也许你会跟我有同样的感觉,一些常用的操作如,读写文件、Bitmap转换、日期格式化等等。当我们使用的时候,我们很难一下子就将它写出来,我们可能会记得以前有个项目使用过,然后去翻以前的项目,有的可能去 google 下,拷贝一段代码。
这些都是比较常用的功能,并且代码相对固定,我们可以将我们平时使用的工具类收集到一个单独的类库中。然后将其分好类:
上面只是举了三个例子,所有的工具类都可以收集。
当你工作3年或者5年之后,你再来看一看这个库,或许就会不一样了。
当我们学习一个功能或者解决一个问题的时候,我们可以把整个过程梳理总结一下,如果我们学习了或者解决问题之后不做思考和总结,那么过一段时间或许就全部忘了。好记性不如烂笔头,梳理一下,记一个笔记或者写一篇博文。这样做有很多好处:
1、有利于加深我们的记忆。
2、脉络梳理清楚了,有助于我们更深刻的理解。
3、就算以后忘记了,再来翻一下自己的笔记或者博客,再看一遍,就又想起来了。
4 、还可以帮助其他人,避免遇到相同的问题。
当我们做完一个项目的时候,留给自己一些时间做一些梳理和总结吧,如果你还没有这样的习惯,那么就从现在开始吧!总之,形成自己的知识体系很重要。
本文梳理了Android 开发者进阶过程学习的一些知识点和一些我个人的建议。
关于Java基础、Android 基础、Android 进阶 ,只是作了知识点梳理,没有解答,点到为止。要详细学习这些知识点还需自己去看书、看博客、查资料等。
当然了,本文所列出的知识点还不完全,要比较系统的学习,我这里可以分享我分享一份大佬收录整理的Android学习PDF+架构视频+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效的帮助大家掌握知识、理解原理。
当然你也可以拿去查漏补缺,提升自身的竞争力。
如果你有需要的话,可以私信或者评论。
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
喜欢本文的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~