Android开发如何进阶,薪资如何跟上年龄的脚步?

Posted 懂你的大海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发如何进阶,薪资如何跟上年龄的脚步?相关的知识,希望对你有一定的参考价值。

经常在简书和微信上收到一些同学的私信,说自己马上毕业或者已经毕业一年,从事android开发相关的工作,现在不知道要学习什么东西了。或者说自己也在摸索着学习,但是不知道学习的路线对不对,感觉很迷茫,想让我给一些建议。

其实大多数的开发者都有过类似的经历(我也有过),当自己项目完成、处于维护阶段的时候,工作不忙,想自己学习,但是又不知道学什么?从何学起?东一榔头西一棒子,最终收获甚少。然后开始自我怀疑,厌倦学习,从此堕落。

那么,作为Android 开发者,该怎样规划自己的学习路线,然后一步一个脚印的向中高级进阶呢?本篇文章根据自己的一些见解梳理一下。

一、Java基础

首先,Java作为Android开发的第一语言(Kotlin普及还需要时间),要想在Android开发中游刃有余,就得先打牢Java基础,Java 基础有哪些呢?除了一些基本的语法之外,总结了如下一些基础:

1 . 面向对象的三大特性:
Java 作为面向对象编程语言,你得知道OOP的的三大特性
封装继承多态

2 . 程序设计的6大原则:

  • 单一职责原则

  • 里氏替换原则

  • 依赖倒置原则

  • 接口隔离原则

  • 迪米特法则

  • 开闭原则

了解这6大设计原则是非常有必要的,它能指导你的程序整个结构的设计和规范。要想提高你的代码质量,请熟记这几个原则。在我们设计类、方法、接口的时候,请遵循这些原则。

3 . 设计模式

  • 单例模式 :double check 双重加锁方式、静态内部类方式、枚举方式。

  • 构造器模式

  • 模板方法模式

  • 装饰器模式

  • 观察者模式

  • 责任链模式

  • 策略模式

23种设计模式就不一一列举了,不管你是工作了5年还是工作了1年,学习一下设计模式吧,这有助于打开你的编程思维。

4 . Java 字符串相关
Java 字符串相关的三个类:StringStringBuilderStringBuffer ,你知道他们的区别吗?这也是面试中比较常问的,如果你还不知道?那就去查查资料吧。

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 开发者,要想走的更远,也要学好Android基础。

1 . Android 四大组件
Android四大组件是Android的根本,从我们学习Android 时候,就先认识了它们:

  • Activity

  • Service

  • BroadcastReceiver

  • ContentProvider

Activity:

Activity 再熟悉不过了吧,我们APP 所能看到的活动界面就是一个个Activity,说到Activity,我们得知道:

  • 1,Activity 的生命周期

  • image

  • 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的基础知识点,仅仅熟悉这些还不够,还需要学习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型图):

image

当这几个方法都调用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架构师所必备的八大技能!

以下资料全部免费赠送,需要的可以点击这里免费自取!!

架构师筑基必备技能

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

JAVA知识要点:
1、 Java序列化、泛型与反射
2、虚拟机底层原理
3、Android内存原理
4、 Java高级并发原理详解
5、 编译时技术掌握与实战
6、JDK高级动态代理
7、高级数据结构与算法
8、 Java IO操作
9、
。。。。

Android R FrameWork源码与UI

在Android中,Framework泛指系统架构层。Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。

UI其实并不是单纯指用户看到的效果。因为在Android开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会UI不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从Activity的创建,XML的解析,到每个控件的测量、布局、绘制。当然在中间还夹杂着比如动画、事件分发机制、嵌套滑动机制等知识点。还有谷歌提供的一些UI框架也使我们要掌握的对象,比如Jetpack组件库、Material Design等。

知识要点:
1、 FrameWork源码解析(SDK 30)
2、Android常用组件深入解析
3、JetPack全家桶
4、Android R新特性解析
。。。。。

大厂内部APP调优方案

性能优化是一个项目必须要经历的过程,你的应用好与坏都是在用户使用的过程中反映出来的,如果性能优化没有做好,对于你的应用来说影响是非常大的。尤其是现在的Android市场竞争非常激烈,如果你的应用体验没有竞品的好,那么用户流失是必然的。

性能优化不是一件简单的事情,每个应用的性能好与坏无法由一个人来决定,因为性能优化的维度有太多了,从我们项目的整体架构,到我们代码的每一个细节,再到应用使用环境的测试,只有步步为营,才能做好一个项目的优化。大部分开发者把性能优化指向与不闪退就行,但是实际上性能优化包含了很多方面,比如从简单的启动优化、 UI优化、 卡顿优化、 崩溃优化、 安全性优化,到深层次的弱网优化、 大图加载优化、 储存优化、 高效传输优化、 极限瘦身优化,再到实际开发过程中的OOM问题原理解析、 ANR问题解析、 Crash监控方案。要想把这些优化流程做好,我们不仅从项目架构、代码规范等方面入手,还用学会利用第三方的检测工具来检测项目性能,最主要是,我们需要一套完整的性能优化方案,这正是我们所缺少的,所以我们必须要把缺少的补上, 打造一套真正的完整的性能优化体系,把性能优化流程化,常态化。

1、 APP基础优化
2、APP深度优化
3、开发焦点问题优化
4、编程效率优化
5、项目实战
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践

对标腾讯T3.3架构师

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。

Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。

知识要点:
1、架构师设计思想篇
2、 手淘全套架构设计与实现
3、 开源框架
4、OKHttp网络框架
5、一线大厂核心框架剖析与实现

NDK模块开发(音视频系列)

NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。

在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。

知识要点:
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习

Flutter学习进阶

2019 年无疑是 Flutter 技术如火如荼发展的一年。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门

微信小程序开发

微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。

知识要点:
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战

由于篇幅原因,如有需要以上完整学习笔记PDF,可以点击这里免费自取!!

大厂的招聘条件我深入和一些资深Android架构师交流过意见,归纳总结了一份对标种大厂的Android学习路线图,因为从招聘要求去找自己的不足实在是太过片面,而且学习是一个长期的过程,那些Android大佬并不是刚一入行就是大佬的,都是经过长时间的实践,学习,踩坑,填坑来一步一步成长起来的。以下学习路线图并没有完全放出来,都只是放了几个章节,有需要完整路线图的同学可以点击:下载链接自行获取,免费赠送

再说一句,时刻保持学习状态,与其焦虑不安,不如破釜沉舟。

只要你往前在走,总有转机在前方等候。

以上是关于Android开发如何进阶,薪资如何跟上年龄的脚步?的主要内容,如果未能解决你的问题,请参考以下文章

技术迭代日益快速的时代下,技术人如何自处?

如何跟上时代的步伐进入云世界

如何跟上时代的步伐进入云世界

跟上Java的脚步 Stream -待完成

还在打王者?链游已经开始风靡世界,跟上脚步带飞你!

Android开发如何进阶?