Android Performance

Android Developer Learning Path (2020 Edition)

Word count: 1.2kReading time: 7 min
2020/02/03
loading

On Medium, @MindOrks published a 2020 Android Developer Learning Path. Given that some readers may have difficulty accessing the original content, I am sharing it here combined with my own 2020 learning plan for your reference.

The original article is quite simple, mostly listing knowledge points without much explanation. I have added brief introductions for each point and included some additional topics based on my own understanding. This is for your reference only.

This article is primarily for Android developers. If you are a beginner, it will help you find a learning path. If you are an experienced developer, it can help you identify gaps in your knowledge. If you have any other suggestions, feel free to leave a message.

Programming

Java

Java is the default language for Android App development and the Android Framework. Mastering Java is a mandatory skill for Android developers.

For those who want to dive deeper into the Java Virtual Machine, I recommend:

  1. Zhou Zhiming’s “Understanding the Java Virtual Machine (3rd Edition)”
  2. Deng Fanheng’s “Understanding Android Java VM: ART”

Kotlin

Google shifted to a “Kotlin First” strategy several years ago. Most official documentation and demos now use Kotlin by default. Its importance is self-evident.

Google also provides a “Refactoring to Kotlin” tutorial:

This codelab is for any developer who uses Java and is considering migrating their project to Kotlin. We will start with several Java classes and guide you through converting them to Kotlin using the IDE. Then, we look at the converted code and research how to improve it, make it more idiomatic, and avoid common pitfalls.

Flutter

As Google’s “favorite son,” Flutter receives significant official support. Flutter recently released v1.12.13_hotfix.7, which fixed several critical bugs. As mentioned in Flutter 1.12 latest hotfix and 2020 Roadmap: “The v1.12.13+hotfix.7 release mainly resolves three major issues: reportFullyDrawn exception, crashes on Huawei phones, and cursor/keyboard input anomalies.” You can also check out their 2020 Roadmap released on January 30th.

For the development of Flutter, you can refer to Gityuan’s Flutter Cross-Platform Evolution and Architecture. Currently, several Bytedance apps have integrated Flutter for hybrid development. Personally, I believe it’s no longer a time to wait and see on Flutter in 2020; readers can decide whether to start learning based on their own technical plans.

Android Studio

Android Studio IDE Overview

As the default Android development tool, recent updates have resolved many performance issues. While hardware requirements remain high, it is a very powerful tool once you get used to it.

Key areas to master:

  1. AS Shortcuts
  2. AS Plugins
  3. AS Profiler (Memory, CPU, IO, Network)

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

Familiarize yourself with project directory structures, resource files, and Gradle files.

Android Basics

Core Components

These are the foundations of Android development:

  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, etc.: Common components used to build complex layouts.
  2. ViewGroup - LinearLayout, RelativeLayout, FrameLayout: The three traditional layouts.
  3. ConstraintLayout: Google’s recommended layout, which has largely replaced RelativeLayout as the default for apps. Refer to the Official Documentation.

Dynamic User Interface

  1. RecyclerView - The preferred widget for lists, offering better performance and more features than ListView.
  2. ViewPager
  3. Spinner

CustomView

When default layouts don’t meet design requirements, you need to customize Views. Master the following:

  1. Canvas
  2. Bitmap
  3. Paint

UI Resources

Using resource files instead of hardcoding improves maintainability.

  1. Drawables
  2. Strings
  3. Styles

Fragments

Many advocate for a Single Activity + Multiple Fragments architecture. Managing Fragments is an art in itself, and you’ll encounter various “gotchas” in practice.

  1. Fragment Lifecycle
  2. Fragment Manager

Support User Interface

Common functional components:

  1. ProgressBar
  2. Dialogs
  3. Toast & Snackbar

Storage

App development inevitably involves file handling.

  1. Shared Preferences - Best for key-value pairs.
  2. File Systems - File-based storage.
  3. Database — RoomDB - Google’s recommended database solution (part of AndroidX). Refer to the Official Documentation.

Build

Android apps use Gradle by default. Familiarize yourself with Gradle, build configurations (Debug/Release), multi-channel packaging, and bytecode manipulation tools like ASM.

  1. Gradle
  2. Debug / Release Configuration
  3. Multi-channel Packaging
  4. ASM

Threading

Understanding Threading is crucial. Efficiently switching between the main thread and worker threads is key.

  1. Threads
  2. Handler / Looper / Message / MessageQueue
  3. AIDL / Binder (for inter-process communication)

Debugging

Essential debugging tools and techniques:

  1. Memory profiling - MAT, AS Memory Profiler
  2. Logging - Logs provide rich information to reconstruct issues.
  3. Systrace - A tool to view the running state of system processes. Refer to my Systrace Series.
  4. Exceptions - Handling various exceptions to ensure robustness.
  5. Error Handling - Resolving Errors that cause app crashes.

Memory Leak

A major topic involving both Java and Native memory leaks. Java leaks are generally easier to detect and fix with tools like LeakCanary or Matrix, while Native leaks can be more challenging.

  1. Detecting and Fixing Memory Leaks
  2. Context - Improper use of Context is a common cause of leaks.
  3. Native Memory Leaks

3rd Party Libraries

Classic libraries that significantly save development time:

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

Data Formats

Common data serialization formats:

  1. JSON — GSON, Moshi
  2. FlatBuffers
  3. Protocol Buffers (Protobuf)

Android Jetpack

Jetpack is a suite of libraries, tools, and guidance to help developers write high-quality apps more easily.

  1. Foundation Components — AppCompat, Android KTX, Multidex
  2. Architecture Components — LiveData, ViewModel, DataBinding, Paging, WorkManager, Navigation
  3. Behavior Components - DownloadManager, MediaPlayback, Notifications, Permissions, Preferences, Sharing, Slices
  4. UI Components - Animation & Transition, Emoji, Palette

Architecture

Understand the common architectural patterns and choose what fits your project:

  1. MVVM - Model-View-ViewModel, separates UI state and logic.
  2. MVI - Model-View-Intent.
  3. MVP - Model-View-Presenter, where the Presenter handles logic and the Model provides data.

Testing

  1. Local Unit Testing
  2. Instrumentation Testing

Firebase

Useful for global apps:

  1. FCM (Firebase Cloud Messaging)
  2. Crashlytics
  3. Analytics
  4. Remote Config
  5. App Indexing
  6. Dynamic Links

Security

Security is paramount, especially regarding user data.

  1. Encryption / Decryption
  2. Proguard
  3. R8

App Release

  1. .keystore files
  2. App Bundle
  3. Play Store
  4. Multi-channel Packaging
  5. Pluginization

Keep Learning and Improving

As an aspiring Android developer, having your own technical stack and roadmap is vital for competitiveness. Set clear goals for 2020. Keep Learning and Improving!

If you are looking for better time management, I recommend this video on How I Make Weekly Plans | Productivity | My Method.

“Plan ahead, or fail.” Annual plans are too long, and daily plans are too short. Managing time by the week is often the most practical way to maintain consistency over the long term.

Other Links

For further discussion, you can also find this article on:
Zhihu - Android Developer Learning Path (2020 Edition)

About Me && Blog

Below is my personal introduction and related links. I look forward to exchanging ideas with fellow professionals. “When three walk together, one can always be my teacher!”

  1. Blogger Intro: Includes personal WeChat and WeChat group links.
  2. Blog Content Navigation: A guide for my blog content.
  3. Curated Excellent Blog Articles - Android Performance Optimization Must-Knows: Welcome to recommend projects/articles.
  4. Android Performance Optimization Knowledge Planet: Welcome to join and thank you for your support~

One walks faster alone, but a group walks further together.

Scan WeChat QR Code

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 Basics
    1. 3.1. Core Components
    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 Libraries
  7. 7. Data Formats
  8. 8. Android Jetpack
  9. 9. Architecture
  10. 10. Testing
  11. 11. Firebase
  12. 12. Security
  13. 13. App Release
  14. 14. Keep Learning and Improving
  15. 15. Other Links
  16. 16. About Me && Blog