Android Tech And Perf

Android 开发者学习路线(2020 版本)

Word count: 2.7kReading time: 10 min
2020/02/03

Medium 上 @MindOrks 发布了一篇 2020 年 Android 程序员的学习线路,鉴于一部分人无法阅读原文(你懂得原因),我把这篇文章的内容结合自己的 2020 年的学习计划,一起发出来,给大家一个参考

原文比较简单,并没有介绍为什么要推荐这些,只是单纯地列了一下知识点,我这边针对每个知识点做一些简单的介绍,有些知识点原文并没有提到,我会根据自己的理解加上,仅供参考

这篇文章主要针对 Android 开发者,如果你是新手,那么下面的内容可以帮助你找到学习的线路;如果你是老手,这篇文章列出的内容也可以帮助你查漏补缺。如果各位有什么其他的建议,欢迎留言交流

Programming

Java

Java 是 Android App 开发默认的语言, Android Framework 也是默认使用 Java 语言,熟练掌握 Java 语言是 Android 开发者的必备技能。

希望深入 Java 虚拟机的同学,也可以参考下面两本书:

  1. 周志明的《深入理解Java虚拟机(第3版)》
  2. 邓老师的 《深入理解Android Java 虚拟机 ART》

Kotlin

Google 几年前就开始走 “Kotlin First” 的路线,目前很多官方的文档和 Demo 都是使用 Kotlin 语言作为默认,Kotlin 的重要性不言而喻。

Google 官方也出了个“Refactoring to Kotlin”的教程,其介绍如下:

此 Codelab 的适用对象为任何使用 Java 并考虑将其项目迁移到 Kotlin 的开发者。我们将从数个 Java 类入手,引导您使用 IDE 将它们转换为 Kotlin。接着,我们会审视转换后的代码,研究如何加以改善,使其更符合使用习惯,同时避免常见错误

Flutter

Flutter 作为 Google 的亲儿子,其官方的扶持力度大家有目共睹。 Flutter 于几天前发布了v1.12.13_hotfix.7 版本,修复了几个比较严重的 Bug,如Flutter 1.12 最新 hotfix 与 2020 路线计划 这篇文章介绍所述,“v1.12.13+hotfix.7 版本主要在于解决了我比较关心的三个问题,包括: reportFullyDrawn 异常、华为手机上崩溃、光标和键盘输入异常 这几个问题。”.感兴趣也可以看一下其 1 月 30 号发布的 2020 Roadmap

Flutter 的发展大家可以看一下 Gityuan 的这一篇Flutter 跨平台演进及架构开篇,目前字节跳动的多个 App 已经接入 Flutter 进行混合开发。个人对 2020 年 Flutter 不再持观望态度,读者可以根据自己的技术规划决定是否开始学习

Android Studio

Android Studio IDE Overview

Android Studio 作为 Android 默认的开发者工具,目前的版本更新已经解决了诸多之前的性能问题,虽然目前对硬件资源的要求仍然比较高,但是一旦你接受了这个设定,真香预警!

AS 主要需要熟悉下面几点

  1. AS 快捷键
  2. AS 插件
  3. AS Profile (内存、CPU、IO、NetWork)

Project Structure — Java/Kotlin/Flutter, XML, .gradle files

熟悉各种项目的目录结构,资源文件、Gradle 文件

Android 基础知识

四大组件

这部分不必做过多的解释,下面列出的就是大家熟悉的 Android 四大组件,Android 开发的基础

  1. Activity — Activity Lifecycle, Tasks & Back Stack
  2. Service
  3. Broadcast Receiver
  4. Content Provider

Intents

  1. Types of Intent - Implicit, Explicit
  2. Intent Filter

Static User Interface

  1. View — Button, ImageView, TextView, EditText, and etc :这是开发中会遇到的常用的组件,许多复杂的布局都是用简单基础的 View 组合而成
  2. ViewGroup - LinearLayout, RelativeLayout, FrameLayout:三大传统布局,适用于不同的场合
  3. ConstraintLayout : Google 新推的布局,目前已经取代 RelativeLayout 成为默认的 App 布局,具体使用可以参考官方文档

Dynamic User Interface

  1. RecyclerView - 列表类的布局首选控件,性能相对 ListView 要好一些,功能也比 ListView 要多一些
  2. ViewPager
  3. Spinner

CustomView

Android 默认的布局很多时候都没法满足设计的需求,这时候就需要自定义 View,你需要掌握下面几个知识点的使用

  1. Canvas
  2. Bitmap
  3. Paint

UI Resources

相比 HardCode,使用资源文件会让代码的可修改性更高

  1. Drawables
  2. String
  3. Styles

Fragments

许多人提倡 App 使用 单 Activity + 多个 Fragment 的组合,可见 Fragment 在开发中的重要性,但是 Fragment 的管理又是一门技术,Fragment 的坑,只能在实际开发中慢慢填平了,不过下面的 Fragment 基础还是要牢固

  1. Fragment Lifecycle
  2. Fragment Manager

Support User Interface

这里列的同样是一些功能组件,需要知道这是什么东西,基本的用法

  1. ProgressBar - 进度条
  2. Dialogs - 弹框
  3. Toast & Snackbar - 提示

Storage

App 开发不免要和文件打交道,文件的读写、存储都是必不可少的,下面列出了几种 Android 中存储相关的知识点

  1. Shared Preferences - 适合存储字段
  2. File Systems - 文件存储
  3. Database — RoomDB - 数据库存储,RoomDB 是 Google 新推出的数据库解决方案(在 AndroidX 中),具体使用可以参考官方文档

Build

Android App 默认使用 Gradle 进行编译,关于 Gradle 的使用必须要熟悉,以及如何区分开发版本和 Release 版本,以及国内特有的多渠道打包技术、以及 ASM 等

  1. Gradle
  2. Debug / Release Configuration
  3. 多渠道打包
  4. ASM

Threading

理解 Thread 非常重要,Android App 只有一个主线程,其余的我们称之为工作线程,我们的很多工作需要再工作线程和主线程直接切换,如何高效创建和释放线程、线程池、线程间通信、Message-Looper-Handler 模型这些知识点都要了熟于心,另外进阶的话 Binder 通信也是需要掌握的知识

  1. Threads
  2. Handler / Looper / Message / MessageQueue
  3. AIDL / Binder

Debugging

这里列举了一些 Debug 的基本手段,实际开发中遇到具体问题的时候一般都会用到,不过有的可能入手难度要高一些,需要花时间去掌握。Debug 工具除了下面这几个还有很多

  1. Memory profiling - MAT,AS Memory Profile
  2. Logging - Log 包含非常丰富的信息,可以帮助我们还原现场
  3. Systrace - Systrace 工具可以查看一段时间内手机系统各个进程的运行状态,具体使用可以参考我博客的 Systrace 系列教程
  4. Exceptions - 各种异常,保证程序的健壮性
  5. Error Handling - Error 是必须要解决的问题,一般会导致 App 直接闪退,需要非常重视

Memory Leak

内存泄漏是一个很大的专题,包括 Java 内容泄漏和 Native 内存泄漏,涉及的知识点非常多,可以单独拿出来做一个大的知识栈。一般来说, Java 内存泄漏会比较好检测和修复,但是 Native 内存泄漏就会比较难。

  1. Detecting and Fixing Memory Leaks - 内存泄漏检测和修复,是一个比较大的工程,可以参考 LeakCanary、Matrix 等开源工具
  2. Context - 使用不当会造成该释放的对象没有释放造成内存泄漏
  3. Native Memory Leaks

3rd Party Library

经典的第三方类库,可以大幅节约我们的开发时间

  1. Image Loading - Glide, Picasso
  2. Dependency Injection - Dagger
  3. Networking - Fast Android Networking Library, Retrofit
  4. MultiThreading - RxJava, Coroutines

Data Format

常见的一些数据保存流格式

  1. JSON — GSON
  2. Flat Buffer
  3. Protocol Buffer

Android Jetpack

Jetpack 是 Google 推出的一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。

  1. Foundation Components — AppCompat, Android KTX, Multidex
  2. Architecture Components — LiveData, ViewModel, DataBinding, Paging, Work Manager, Navigation
  3. Behaviour Components - Download Manager, Media Playback, Notification, Permissions, Preference, Sharing, Slice
  4. UI Component - Animation & Transition, Android Auto, Emoji, Palette, Android TV, Android Wear

Architecture

传统的开发架构,没有绝对的哪个好哪个不好,只有哪个适合哪个不适合,下面三种你都应该知道并有一定的了解

  1. MVVM - MVVM 是 Model-View-ViewModel的简写。它本质上就是 MVC 的改进版。MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开
  2. MVI ?
  3. MVP - MVP 从更早的 MVC 框架演变过来,与 MVC 有一定的相似性:Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示

Unit Testing

  1. Local Unit Testing
  2. Instrumentation Testing

Firebase

Firebase 国内很多开发者用不到,这里简单看一下即可(说不定哪天国内就可以用了呢)

  1. FCM
  2. Crashlytics
  3. Analytics
  4. Remote Config
  5. App Indexing
  6. Dynamic Link

Security

安全方面接触毕竟多的应该是加密、解密、混淆等,毕竟用户数据安全大于一切,不重视这个欧盟会教你做人

  1. Encrypt / Decrypt
  2. Proguard
  3. R8

App Release

应用发布相关的知识,国内还得加上多渠道打包、插件化

  1. .keystore file
  2. App Bundle
  3. Playstore
  4. 多渠道打包
  5. 插件化

Keep Learning and Improving

作为一个有进取心的 Android 开发者,拥有自己的技术栈和规划非常重要,技术栈确保你有足够的市场竞争力,从而形成护城河;技术规划则可以给你一个明确的学习目标。卸载抖音、微博、斗鱼、游戏吧,做好 2020 年的规划,Keep Learning and Improving ,共勉

如果你苦于没有好的时间管理方法,可以参考这个视频我是怎么做周计划 | 生产力提升 | 我的方法,这个是我熟悉的一个大佬的工作学习方法实践,推荐给大家

凡是预则立,不预则废,年度计划太长,日计划又太短。实践下来发现以周为单位做时间管理(时间管理)最靠谱,既考虑了短期又考虑了长期,可以使自己长期坚持做某事,也有一定的时间长度用来甄有价值的事情。

本文其他地址

由于博客留言交流不方便,点赞或者交流,可以移步本文的知乎或者掘金页面

知乎 - Android 开发者学习路线(2020 版)

关于我 && 博客

  1. 关于我 , 非常希望和大家一起交流 , 共同进步 .
  2. 博客内容导航
  3. 优秀博客文章记录 - Android 性能优化必知必会

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. Programming
    1. 1.1. Java
    2. 1.2. Kotlin
    3. 1.3. Flutter
  2. 2. Android Studio
    1. 2.1. Android Studio IDE Overview
    2. 2.2. Project Structure — Java/Kotlin/Flutter, XML, .gradle files
  3. 3. Android 基础知识
    1. 3.1. 四大组件
    2. 3.2. Intents
    3. 3.3. Static User Interface
    4. 3.4. Dynamic User Interface
    5. 3.5. CustomView
    6. 3.6. UI Resources
    7. 3.7. Fragments
    8. 3.8. Support User Interface
    9. 3.9. Storage
    10. 3.10. Build
    11. 3.11. Threading
  4. 4. Debugging
  5. 5. Memory Leak
  6. 6. 3rd Party Library
  7. 7. Data Format
  8. 8. Android Jetpack
  9. 9. Architecture
  10. 10. Unit Testing
  11. 11. Firebase
  12. 12. Security
  13. 13. App Release
  14. 14. Keep Learning and Improving
  15. 15. 本文其他地址
  16. 16. 关于我 && 博客