常常在简书和微信上收到一些同窗的私信,说本身立刻毕业或者已经毕业一年,从事Android开发相关的工做,如今不知道要学习什么东西了。或者说本身也在摸索着学习,可是不知道学习的路线对不对,感受很迷茫,想让我给一些建议。css
其实大多数的开发者都有过相似的经历(我也有过),当本身项目完成、处于维护阶段的时候,工做不忙,想本身学习,可是又不知道学什么?从何学起?东一榔头西一棒子,最终收获甚少。而后开始自我怀疑,厌倦学习,今后堕落。java
那么,做为Android 开发者,该怎样规划本身的学习路线,而后一步一个脚印的向中高级进阶呢?本篇文章根据本身的一些看法梳理一下。c++
首先,Java做为Android开发的第一语言(Kotlin普及还须要时间),要想在Android开发中游刃有余,就得先打牢Java基础,Java 基础有哪些呢?除了一些基本的语法以外,总结了以下一些基础:程序员
1 . 面向对象的三大特性:
Java 做为面向对象编程语言,你得知道OOP的的三大特性
封装、继承、多态。面试
2 . 程序设计的6大原则:算法
单一职责原则数据库
里氏替换原则编程
依赖倒置原则设计模式
接口隔离原则缓存
迪米特法则
开闭原则
了解这6大设计原则是很是有必要的,它能指导你的程序整个结构的设计和规范。要想提升你的代码质量,请熟记这几个原则。在咱们设计类、方法、接口的时候,请遵循这些原则。
3 . 设计模式
单例模式 :double check 双重加锁方式、静态内部类方式、枚举方式。
构造器模式
模板方法模式
装饰器模式
观察者模式
责任链模式
策略模式
23种设计模式就不一一列举了,无论你是工做了5年仍是工做了1年,学习一下设计模式吧,这有助于打开你的编程思惟。
4 . Java 字符串相关
Java 字符串相关的三个类:String
、StringBuilder
、StringBuffer
,你知道他们的区别吗?这也是面试中比较常问的,若是你还不知道?那就去查查资料吧。
5 . Java 线程池
线程池方面,JDK 为咱们内置了几种线程池:
newFixedThreadPool:newFixedThreadPool,建立固定大小的线程池,poolCoreSize和maxPoolSize 相等,到达coreSize,则将新的任务放到缓存队列,有线程执行完毕,直接去取。
newSingleThreadExecutor:newSingleThreadExecutor,建立一个单线程的线程池,核心池的大小和最大池大小都为1.
newCacheThreadPool:newCacheThreadPool,无大小限制的线程池,提交一个任务就建立一个线程执行。
若是默认的几种线程池还不能知足你的需求,那就试一试自定义线程池吧!自定义线程池继承ThreadPoolExecutor。
6 . Java 集合
集合是Java中用得最多的了吧,你也面试的必问题之一,对于Java集合,你的脑壳里要熟记它的整个框架图:
Collection
(1) List:
LinkedList
ArrayList
Vector
(2) Set
HashSet
TreeSet
Map:
HashMap
TreeMap
HashTable
咱们须要知道每一个容器的特性,以及它们的扩容方式(这个很重要)。根据咱们的数据大小、特定场景、业务逻辑来选择合适的容器。
7 . Java 内存模型
Java 内存模型这一块很是重要,由于它涉及到咱们程序的性能,咱们须要知道,内存是如何分配的,成员变量、静态变量、局部变量、对象等各自分配到哪个区:
栈内存
堆内存
垃圾回收机制:
涉及到内存,咱们就须要知道java的垃圾回收机制,虽然Java 不像c++同样须要咱们本身分配内存、释放内存。可是咱们仍是须要知道它的回收机制,分代回收:
年轻代:1 Eden 区 和2个Survivor 区
年老代
永久代
分代回收分为了三个代,每一个代的垃圾回收时机和频率是不同的,所以才用的回收算法也不同。
总的来讲:年轻代的回收频率很高,对象的生命周期比较短暂,当通过必定次数的回收周期以后,年轻代的对象还存活的话,就会被移动到年老代,年老代的回收比较耗时,回收频率较低,回收成本较大。
Java 基础总结:关于Java基础暂时就总结了这些,这些都是Android 开发中比较经常使用或者经常须要关心的一些东西。若是你想比较系统的学习Java基础相关的东西,推荐你去看一下经典书籍《Thinking in Java》。
就像建造房屋同样,要建造一座宏伟的建筑,首先得打牢根基。一样的,做为Android 开发者,要想走的更远,也要学好Android基础。
1 . Android 四大组件
Android四大组件是Android的根本,从咱们学习Android 时候,就先认识了它们:
Activity
Service
BroadcastReceiver
ContentProvider
Activity:
Activity 再熟悉不过了吧,咱们APP 所能看到的活动界面就是一个个Activity,说到Activity,咱们得知道:
1,Activity 的生命周期
2,Activity 的几种启动方式:
standard
SingleTask
SingleTop
SingleInstance
请记住这几种启动方式的区别。
3,Activity 间传如何递数据?
4,Activity 横竖屏切换生命周期有哪些变化?
5,显示Intent 和隐式Intent 有和区别?
Service:
Service 也是咱们用得比较多的一个组件,关于Service ,咱们须要知道:
Service 的生命周期
Service 的两种启动方式:
1, startService
2, bindService
2种启动方式 所走的生命周期方法是不同的
Service vs IntentService:
Service 和IntentService 个自用于不一样的场景,想知道他们各自的使用场景和区别吗?查资料去吧!
BroadcastReceiver:
广播相关的知识点:广播有两种注册方式,Manifest 清单文件中注册和 代码中动态注册,代码中注册的广播通常为局部广播,最好 register 和 unRegister 成对出现,别忘了反注册。
全局广播能够跨应用访问,存在安全隐患而且效率不高,所以出现了更安全、更高效的替代者:LocalBroadcastReceiver
,使用很是简单。若是在代码中看到的是LocalBroadcastReceiver
而不是BroadCastReceiver
,我会给你加分。
ContentProvider
ContentProvider 可能用得不是不少,能够用于共享数据,提供数据源,掌握会写增删改查就行了。
啰嗦一下:四大组件须要在清单文件中声明。
2 . Android 经常使用的几种布局
1,帧布局 FrameLayout
2,线性布局 LinearLayout
3,相对布局 RelativeLayout
4,Google 新出的约束布局ConstraintLayout
3 . Android Studio
Android Studio 是咱们Android开发的经常使用工具,熟练操做和使用上面的快捷键和一些插件,对咱们的开发效率有很大的帮助。
Android Studio 有不少好用的插件,能够根据本身的须要安装,如:
GsonFormat
Parcelable 序列化
翻译插件:对于英文不是很好的颇有帮助。
除了一些好用的插件以外,还能够根据本身的习惯设置一些快捷键,总之,工欲善其事,必先利其器。要提升开发效果,先配置好咱们的开发工具。
4 . Fragment
1,Fragment 的生命周期
2,Fragment 与fragment 之间的通信方式
3,Fragment 与Activity 之间的通信方式
4,Fragment + ViewPager 懒加载
5,Fragment +TabLayout 选项卡
5 . 数据库相关
Android 自带数据库 Sqlite, 关于数据库,咱们应该熟悉:
1,数据库和表的建立
2,数据的增删、改、查。
3,数据库升级:
这点尤其重要,由于数据库的升级每每伴随着数据的升级,不能升级以后把前面的用户数据弄没了。
4,三方库:GreenDao:
若是你以为本身作这些操做很麻烦的话,你能够选择你一些三方的库,如GreenDao,已经为你封装了全部的这些操做,只需简单配置就能使用。固然,Github 上还有不少相似的库,根据本身的须要选择。
6 . 经常使用控件基础控件
1,RecyclerView & ListView
2,ViewPager
3,TextView
4,ImageView
5,Button
6,Checkbox
7,RadioButton
全部复杂的界面都由这些简单的基础控件组成,所以,你须要好好了解一下他们的各类属性。
上面列举了一些Android的基础知识点,仅仅熟悉这些还不够,还须要学习Android开发中更高级一点的东西:
1 . View
上面列举了一些基础的View和控件,可是这些基础控件有时候不能知足咱们的需求,这时候就须要自定义View了。
自定义View:
自定义view 的三种方式:
1,组合基础控件
2,继承基础控件,作相应的更改。
3,继承View 或 ViewGroup:
这种方式也是咱们用的比较多的一种方式,这种方式比较自由,定制度高,须要实现下面几个方法
(1) onMeasure()
(2) onLayout()
(3) onDraw()
执行顺序为:onMeasure()
->onLayout()
-> onDraw()
。
View事件分发机制:
自定义view 的时候,咱们须要响应用户的各类事件,这个时候咱们就须要了解View的事件分发机制了。
关于事件分发机制,看一张比较经典的图(U型图):
当这几个方法都调用super 的时候,整个事件会走完这个U型图。
事件分发机制这一块仍是比较难理解的,更多详解请查资料。
App 的几种架构
MVC
MVP
MVVM
常见的三种架构,根据本身的业务须要选择,每种架构都有本身的有点和缺点,另外,我以为一个APP 中,多种架构是能够并存的,好比:MVC和 MVP 。一个很是简单的展现界面,没必要为它弄一个 P 层,反而变得复杂了。
3 . Android 动画
(1) Android 中的5种基础动画
平移动画
缩放动画
旋转动画
Alpha 动画
帧动画
(2) 属性动画
补间动画很简单,可是它的场景使用颇有限,它只能对一个View作动画。有的时候,咱们须要更为精准的控制,咱们要控制一个属性来作动画,这个时候属性动画就派上用场了。属性动画的几个相关类:
ObjectAnimator
ValueAnimator
AnimatorSet
属性动画用得就比较普遍了,属性动画 + 自定义View 配置 Path和贝塞尔曲线 能作出不少复杂的漂亮的效果。
(3)矢量动画
svg
VectorDrawable
AnimatedVectorDrawable
矢量动画你们可能比较陌生,Android Studio 支持将一个Svg 文件导入生成一个path 路径,用VectorDrawable 和AnimatedVectorDrawable 来实现矢量动画。可是须要在Android5.0 以上。
4 . Material Design 系列
Android 5.0 开始,Google 推出了 Material Design 设计规范,Android support 包中也加入了符合Material Design 设计规范的各类控件:
1,Toolbar 的使用
2,AppbarLayout+CollapsingToolbarLayout
3, Behavior 相关:
(1),BottomSheetBehavior
(2), BottomSheetDialog
(3),SwipeDismissBehavior
(4), 自定义Behavior
4, TextInputLayout + TextInputEditText
5, TabLayout
6, BottomNavigationView
7 , CardView 阴影卡片
8 ,Snackbar , FloatActionButton
利用这些控件,能够作出不少符合material Design 设计规范的效果和动画。
更多关于Material Design 的用法,请看个人系列博客
:http://www.jianshu.com/u/35167a70aa39
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
自定义Gradle插件
Gradle 多渠道打包
以上就是Android 相关的一些知识点。
Github 绝对是咱们程序员的宝贵财富,上面有各类各样的开源库,只有你想不到的,没有你找不到的。各大公司也有各类各样的开源的解决方案。
如下是比较流行的一些框架:
图片加载框架:
Universal-Imageloader
Picasso
Glide
Frecssco
网络相关框架:
Retrofit
Okhttp
Volley
RxJava :
RxJava
RxAndroid
数据库方面:
GreenDao
OrmLite
Realm
上面都是当前流行的一些框架。尤为是RxJava , 当你看到Github 上各类各样的 RXxxx 时,你就明白RxJava 有多火。(加个Rx感受逼格都高了一档)。
若是你以为Java 基础、Android 基础这些东西都学得差很少了,整明白了。那么应该学习这些框架了,咱们该怎么学习呢?不只仅是学习怎么使用,咱们能够去学习源码,学习他们的整个框架的设计思路、代码规范。对于部分功能能够仿照着写一个相同的。好比:缓存,图片加载框架都是多级缓存的,咱们能够看一下每一个框架的缓存实现有何不一样,各有什么优缺点,最后仿写一个,把它变成咱们本身的。
当咱们有了必定的积累以后,试着去造轮子吧。能够是一个简单的View、炫酷的动画效果、一个经常使用的组件抽取。把这些经常使用的功能封装成一个库。当之后实现类似的功能的时候,咱们就能够避免重复搬砖了。
若是条件容许,咱们还能够将它开源到Github,有利于他人学习和使用,开源是一件利人利己的事。对于他人而言:能够借鉴思路、或者在项目中直接使用。对于本身而言:使用者发现bug反馈给咱们,修复bug、升级版本,本生也是一个提高本身的机会。同时还能相互之间交流,吸收经验。
若是你尚未开始写一个开源库,那么如今就尝试着写一个吧。
你如今就能够看看你所作的项目,里面是否是有一个 utils
包 ?不用看了,确定有,里面有你使用的各类各样的工具类。
也许你会跟我有一样的感受,一些经常使用的操做如,读写文件、Bitmap转换、日期格式化等等。当咱们使用的时候,咱们很难一会儿就将它写出来,咱们可能会记得之前有个项目使用过,而后去翻之前的项目,有的可能去 google 下,拷贝一段代码。
这些都是比较经常使用的功能,而且代码相对固定,咱们能够将咱们平时使用的工具类收集到一个单独的类库中。而后将其分好类:
文件操做相关 FileUtils
Bitmap 操做相关 BitmapUtils
日期格式化相关 DateUtils
上面只是举了三个例子,全部的工具类均可以收集。
当你工做3年或者5年以后,你再来看一看这个库,或许就会不同了。
当咱们学习一个功能或者解决一个问题的时候,咱们能够把整个过程梳理总结一下,若是咱们学习了或者解决问题以后不作思考和总结,那么过一段时间或许就所有忘了。好记性不如烂笔头,梳理一下,记一个笔记或者写一篇博文。这样作有不少好处:
1, 有利于加深咱们的记忆。
2, 脉络梳理清楚了,有助于咱们更深入的理解。
3,就算之后忘记了,再来翻一下本身的笔记或者博客,再看一遍,就又想起来了。
4 ,还能够帮助其余人,避免遇到相同的问题。
当咱们作完一个项目的时候,留给本身一些时间作一些梳理和总结吧,若是你尚未这样的习惯,那么就从如今开始吧!总之,造成本身的知识体系很重要。
本文梳理了Android 开发者进阶过程学习的一些知识点和一些我我的的建议。关于Java基础、Android 基础、Android 进阶 ,只是做了知识点梳理,没有解答,点到为止。要详细学习这些知识点还需本身去看书、看博客、查资料等。固然了,本文所列出的知识点还不彻底,要比较系统的学习,能够买一本书进行学习。
欢迎你们加入Android技术开发交流群:653583088 本群提供免费的学习指导以及免费的解答不懂得问题均可以在本群提出来 以后还会有职业生涯规划以及面试指导进群修改群备注:开发年限-地区-经验方便解答问题