Leanpub Header

Skip to main content

Manifest Android Interview Course

The ultimate guide to cracking Android & Compose technical interviews.

To ace your next Android developer job interview, focus on truly understanding the concepts, not just memorizing answers, and practicing how to apply them. With over 250 quiz questions, 370 practical and follow-up questions with full answers, and 60+ pro tips, this course helps you sharpen skills, understand the why, and prepare for real-world technical challenges.

ISBN: 979-8285926436

Minimum price

$149.00

$179.00

You pay

$179.00

Author earns

$143.20
$

...Or Buy With Credits!

You can get credits with a paid monthly or annual Reader Membership, or you can buy them here.
PDF
EPUB
WEB
225,935Words
About

About

About the Course

Manifest Android Interview Course presents practical challenges framed as interview questions and offers a structured roadmap for learning and refreshing Android and Jetpack Compose knowledge. It spans the core Android framework, system internals, UI architecture, Jetpack libraries, data and business logic, and Jetpack Compose from fundamentals and runtime behavior to state management, UI composition, and design practices.

This course goes beyond surface-level APIs by diving into Android's internals: it walks through how the Activity lifecycle is managed by the system, how the Compose compiler transforms your code, how the Snapshot system drives recomposition, and how performance optimizations actually work under the hood. Every question is followed by a step-by-step walkthrough that not only explains how to solve it but also explores why the solution works, connecting concepts to their underlying mechanisms and design rationale.

This balance ensures that you strengthen your knowledge of both classic Android and modern declarative development, understanding not only how to use these tools effectively but also why they were designed the way they are.

To simulate real hiring conditions, many lessons end with follow-up challenges that mirror on-site interview tasks, helping you practice deeper problem-solving and technical reasoning. The course includes over 370 practical and follow-up questions with full answers across 8 chapters, each designed to build the kind of analytical thinking that interviewers look for.

The 60+ "Pro Tips for Mastery" sections go beneath the surface, covering internal API design, performance trade-offs, and architectural decisions that matter in real-world projects. Senior engineers will find thought-provoking details to sharpen their expertise, while mid-level developers gain a toolkit for leveling up their Android skills and building a stronger analytical mindset.

Unlike passive reading, this course challenges you to actively engage with the material through over 250 interactive assessments. The assessments include exercises that test your understanding, quizzes that reinforce core concepts, and advanced challenges that analyze real code scenarios. Each chapter concludes with a comprehensive recap of key terms and concepts, followed by assessments designed to solidify your knowledge before moving forward.

Whether you're preparing for an interview, transitioning to Compose, or deepening your Android expertise, this course challenges you to go beyond memorizing APIs. Learn to reason about design choices, understand internal mechanisms, and approach Android development with clarity, curiosity, and confidence.

Upon successfully completing this course, you will receive a Manifest Android Interview Certificate, a digital certificate that validates your comprehensive understanding of Android and Jetpack Compose. This certificate includes:

Official Recognition: A professionally designed digital certificate image.

Personal Signature: Signed by Jaewoong Eum (skydoves), Google Developer Expert for Android, Kotlin, and Firebase.

Completion Verification: Demonstrates that you have passed all quizzes and exercises throughout the course.

This course has been built on top of the same content of the Manifest Android Interview book, with the same ISBN number (979-8285926436)

Instructor

About the Instructor

Material

Course Material

  • Introduction

  • Preface

  • Who This Course Is For

  • What This Course Covers

  • How to Use This Course

  • Course Structure

  • Practical Questions

  • Quizzes and Exercises

  • Earning Your Certificate

  • Staying Current

  • Interview Tips and Strategy

  • Understanding Android Interview Formats

  • Phone/Video Screening (30-60 Minutes)

  • On-Site/Virtual Technical Rounds

  • System Design Rounds

  • Take-Home Assignments

  • Live Coding

  • What Interviewers Are Really Looking For

  • Depth Over Breadth

  • Trade Off Analysis

  • Awareness of Internal Mechanisms

  • Practical Experience Signals

  • Communication Clarity

  • How to Structure Your Technical Answers

  • The “What, How, Why, Trade offs” Framework

  • Example: “Explain when Recomposition is triggered in Compose”

  • When to Mention Alternatives

  • Using Code Examples in Verbal Answers

  • Common Mistakes to Avoid

  • How to Use This Course for Interview Preparation

  • Step 1: Identify Relevant Topics

  • Step 2: Study the Deep Dive Content

  • Step 3: Focus on Pro Tips for Mastery

  • Step 4: Practice with the Practical Questions

  • Step 5: Test Yourself with Quizzes and Exercises

  • Step 6: Review Recaps and Glossary Before the Interview

  • Topic Priority by Role Level

  • Tips for Interviewers

  • Setting Clear Scoring Criteria

  • Using Follow Up Questions Effectively

  • Creating a Comfortable Environment

  • Evaluating Understanding vs Memorization

  • [Chapter 1] Android Framework

  • Chapter Overview

  • Android Overview

  • What is Android?

  • Key Features of Android OS

  • Android Architecture

  • Summary

  • Practical Questions

  • Intents and Pending Intents

  • What is Intent?

  • 1. Explicit Intent

  • 2. Implicit Intent

  • Summary

  • 💡 Pro Tips for Mastery: What is Intent Filters?

  • The Purpose of Pending Intent

  • Key Features of PendingIntent

  • Use Cases

  • Security Considerations

  • Summary

  • Practical Questions

  • Data Serialization and Transfer

  • Serializable vs Parcelable

  • Serializable

  • Parcelable

  • Key Differences:

  • Summary

  • 💡 Pro Tips for Mastery: Parcel and Parcelable

  • The Purpose of Bundle

  • Common Use Cases for a Bundle

  • How a Bundle Works

  • Example: Passing Data Between Activities

  • Example: Passing Data Between Fragments

  • Example: Saving and Restoring State

  • Summary

  • Passing Data Between Activities and Fragments

  • Passing Data Between Activities

  • Passing Data Between Fragments

  • Passing Data Between Fragments With Jetpack Navigation Library

  • 1. Define arguments in the navigation graph

  • 2. Pass data from the source fragment

  • 3. Retrieve data in the destination fragment

  • Using a Shared ViewModel

  • Summary

  • 💡 Pro Tips for Mastery: Fragment Result API

  • Setting a Result Listener in Fragment A

  • Sending Results from Fragment B

  • Behavior of Fragment Results

  • Summary

  • Practical Questions

  • Context and Application

  • What is Context?

  • Application Context

  • Activity Context

  • Service Context

  • Broadcast Context

  • Common Use Cases of Context

  • Summary

  • 💡 Pro Tips for Mastery: What to be careful about when using Context?

  • Avoid Context Use on Background Threads

  • Summary

  • 💡 Pro Tips for Mastery: What is ContextWrapper?

  • Purpose of ContextWrapper

  • Use Cases

  • Example of ContextWrapper

  • Key Benefits

  • Summary

  • 💡 Pro Tips for Mastery: Differences between this and baseContext in Activity

  • this in an Activity

  • baseContext in an Activity

  • Key Differences Between this and baseContext

  • Example: Custom Context Wrapping

  • Summary

  • The Application Class

  • Purpose of the Application Class

  • Key Methods in the Application Class

  • How to Use the Application Class

  • Use Cases for the Application Class

  • Best Practices

  • Summary

  • Practical Questions

  • AndroidManifest and Runtime Permissions

  • The AndroidManifest File

  • Key Functions of AndroidManifest.xml

  • Summary

  • Runtime Permissions

  • Declaring and Checking Permissions

  • Requesting Permissions

  • Providing a Permission Rationale

  • Handling Permission Denial

  • Handling Location Permissions

  • One-Time Permissions

  • Summary

  • Practical Questions

  • Activity Lifecycle and Configuration Changes

  • The Activity Lifecycle

  • Summary

  • 💡 Pro Tips for Mastery: Lifecycle changes between multiple Activities

  • Complete Sequential Lifecycle Flow for Activity A and Activity B:

  • Summary

  • 💡 Pro Tips for Mastery: The lifecycle instance in an Activity

  • How to Use the Lifecycle Instance

  • Benefits of Using the Lifecycle Instance

  • Summary

  • Handling Configuration Changes

  • 💡 Additional Tips

  • Summary

  • What Happens to an Activity During Configuration Changes

  • Default Behavior During Configuration Changes

  • Key Configuration Changes Triggering Recreation

  • Avoiding Activity Recreation

  • Summary

  • Practical Questions

  • Fragment Lifecycle

  • The Fragment Lifecycle

  • Summary

  • 💡 Pro Tips for Mastery: Differences Between fragmentManager and childFragmentManager

  • fragmentManager

  • childFragmentManager

  • Key Differences

  • Summary

  • 💡 Pro Tips for Mastery: The viewLifecycleOwner instance in a Fragment

  • What is viewLifecycleOwner?

  • Difference Between lifecycleOwner and viewLifecycleOwner

  • Summary

  • Practical Questions

  • Services, BroadcastReceivers, and ContentProviders

  • What is Service?

  • 1. Started Service

  • 2. Bound Service

  • 3. Foreground Service

  • Key Differences Between Service Types

  • Best Practices for Using Services

  • Summary

  • 💡 Pro Tips for Mastery: How do you handle foreground service?

  • Key Differences Between Service and Foreground Service

  • Best Practices for Using Services

  • Summary

  • 💡 Pro Tips for Mastery: The lifecycle of the service

  • Lifecycle Methods for Started Service

  • Lifecycle Methods for Bound Service

  • Key Differences Between Started and Bound Service Lifecycle

  • Summary

  • What is BroadcastReceiver?

  • Purpose of BroadcastReceiver

  • Types of Broadcasts

  • Declaring a BroadcastReceiver

  • Registering a BroadcastReceiver

  • Important Considerations

  • Use Cases for BroadcastReceiver

  • Summary

  • What is ContentProvider?

  • Purpose of ContentProvider

  • Key Components of a ContentProvider

  • Implementing a ContentProvider

  • Registering a ContentProvider

  • Accessing Data from a ContentProvider

  • Use Cases for ContentProvider

  • Summary

  • 💡 Pro Tips for Mastery: Using ContentProvider to initialize resources at app startup

  • Practical Questions

  • Chapter 1 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Android Framework

  • Exercise: Android Framework Fundamentals

  • Quiz: Android Framework Concepts

    3 attempts allowed

  • [Advanced Quiz] Android Framework

  • Advanced Quiz: Android Framework Mastery

    3 attempts allowed

  • [Chapter 2] Android System and Performance

  • Chapter Overview

  • Memory Management and ANR Prevention

  • Memory Management in Android

  • Avoiding Memory Leaks

  • Best Practices to Avoid Memory Leaks

  • Summary

  • ANR (Application Not Responding) Errors

  • How to Prevent ANRs

  • Summary

  • Practical Questions

  • Tasks, Back Stack, and Deep Links

  • Deep Links

  • Step 1: Define Deep Links in the Manifest

  • Step 2: Handle the Deep Link in the Activity

  • Step 3: Testing the Deep Link

  • Additional Considerations

  • Summary

  • Tasks and Back Stack

  • Tasks

  • Back Stack

  • Launch Modes

  • Intent Flags

  • Use Cases

  • Example

  • Summary

  • ActivityManager

  • Common Methods of ActivityManager

  • Example Usage

  • ActivityManager in LeakCanary

  • Summary

  • Practical Questions

  • Threading with Looper, Handler, and HandlerThread

  • Looper, Handler, and HandlerThread

  • Looper

  • Handler

  • HandlerThread

  • Key Differences and Relationships

  • Use Cases

  • Summary

  • Practical Questions

  • Debugging and Utility APIs

  • SparseArray

  • Key Characteristics of SparseArray

  • Benefits of Using SparseArray Over an Array or HashMap

  • Limitations of SparseArray

  • Summary

  • Exception Tracing

  • Exception Logging with Logcat

  • Handling Exceptions with try-catch

  • Using a Global Exception Handler

  • Using Firebase Crashlytics

  • Debugging with Breakpoints

  • Capturing a Bug Report

  • Summary

  • Accessibility

  • Leveraging Content Descriptions

  • Supporting Dynamic Font Sizes

  • Focus Management and Navigation

  • Color Contrast and Visual Accessibility

  • Custom Views and Accessibility

  • Testing for Accessibility

  • Summary

  • Practical Questions

  • Build System and App Optimization

  • Build Variants and Flavors

  • Build Variants

  • Product Flavors

  • Combining Build Types and Flavors

  • Advantages of Using Build Variants and Flavors

  • Summary

  • APK vs. AAB

  • APK (Android Package)

  • AAB (Android App Bundle)

  • Key Differences Between APK and AAB

  • Summary

  • R8 Optimization

  • How R8 Works

  • Key Features of R8 Optimization

  • R8 Configuration

  • Advantages of R8

  • Limitations of R8

  • Summary

  • Reducing Application Size

  • Remove Unused Resources

  • Enable Code Shrinking with R8

  • Use Resource Optimization

  • Use Android App Bundles (AAB)

  • Remove Unnecessary Dependencies

  • Optimize Native Libraries

  • Reduce Debug Information by Configuring the Proguard Rules

  • Use Dynamic Features

  • Avoid In-App Large Assets

  • Summary

  • Practical Questions

  • Android Runtime and Process Management

  • The Android File System

  • Key Components of the Android File System

  • Accessing Files in Android

  • File Permissions and Security

  • Summary

  • Android Runtime (ART), Dalvik, and Dex Compiler

  • Android Runtime (ART)

  • Dalvik

  • Dex Compiler

  • Transition from Dalvik to ART

  • Summary

  • Processes in Android

  • How Processes Work in Android

  • Application Components and Process Association

  • Processes and App Lifecycles

  • Security and Permissions

  • Summary

  • 💡 Pro Tips for Mastery: Why are Activities, Services, Broadcast Receivers, and Content Providers called four major components in Android?

  • How Each Component Relates to the Android Process

  • Connection to Android Processes

  • Summary

  • Practical Questions

  • Chapter 2 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Android System and Performance

  • Exercise: Android System Fundamentals

  • Quiz: Advanced Android System Concepts

    3 attempts allowed

  • [Advanced Quiz] Android System and Performance

  • Advanced Quiz: Android System Mastery

    3 attempts allowed

  • [Chapter 3] Android UI

  • Chapter Overview

  • View Lifecycle and Architecture

  • The View Lifecycle

  • Summary

  • 💡 Pro Tips for Mastery: What’s the findViewTreeLifecycleOwner() function in a View?

  • Why Use findViewTreeLifecycleOwner()?

  • Key Use Cases

  • Limitations

  • Summary

  • View vs ViewGroup

  • What is a View?

  • What is a ViewGroup?

  • Key Differences Between View and ViewGroup

  • Summary

  • Invalidation in the View System

  • How Invalidation Works

  • Key Methods for Invalidation

  • Using invalidate() to Update a Custom View

  • Best Practices for Invalidation

  • Summary

  • Practical Questions

  • Layouts and Measurements

  • ViewStub and Deferred Inflation

  • Key Characteristics of ViewStub

  • Common Use Cases for ViewStub

  • How to Use ViewStub

  • Advantages of ViewStub

  • Limitations of ViewStub

  • Summary

  • ConstraintLayout

  • Key Features of ConstraintLayout

  • Example of ConstraintLayout

  • Advantages of ConstraintLayout

  • Limitations of ConstraintLayout

  • Use Cases of ConstraintLayout

  • Summary

  • Dp and Sp Measurement Units

  • What is Dp?

  • What is Sp?

  • Key Differences Between Dp and Sp

  • When to Use Dp or Sp

  • Summary

  • 💡 Pro Tips for Mastery: How would you handle screen breaking when using Sp units?

  • Strategies to Prevent Screen Breaking

  • 1. Wrap Content Properly

  • 2. Use minLines or maxLines for TextViews

  • 3. Use Fixed Sizes for Critical UI Components

  • 4. Test with Extreme Font Sizes

  • 5. Consider Dynamic Sizing with Constraints

  • 6. Use Dp size instead of Sp

  • Summary

  • Nine-Patch Images

  • Key Features of Nine-Patch Images

  • Example Usage in XML

  • Limitations of Nine-Patch Images

  • Summary

  • Practical Questions

  • Custom Views and Canvas

  • Implementing Custom Views

  • 1. Create a Custom View Class

  • 2. Use Custom View in XML Layout

  • 3. Add Custom Attributes (Optional)

  • 4. Handle Layout Measurement (Optional)

  • Summary

  • 💡 Pro Tips for Mastery: Why should you be cautious when using @JvmOverloads on the primary constructor for custom views?

  • Canvas and Custom Drawing

  • How Canvas Works

  • Common Operations with Canvas

  • Transformations

  • Use Cases

  • Summary

  • Practical Questions

  • Drawables and Bitmap Management

  • Drawable Types in Android

  • 1. BitmapDrawable (Raster Images)

  • 2. VectorDrawable (Scalable Vector Graphics)

  • 3. NinePatchDrawable (Resizable Images with Padding)

  • 4. ShapeDrawable (Custom Shapes)

  • 5. LayerDrawable (Multiple Drawables Stacked)

  • Summary

  • Bitmap Loading and Memory Management

  • The Problem with Large Bitmaps

  • Reading Bitmap Dimensions Without Allocating Memory

  • Loading Scaled-Down Bitmaps with Sampling

  • Full Decoding Process with Subsampling

  • Summary

  • 💡 Pro Tips for Mastery: How would you implement caching for large bitmaps in a custom image loading system?

  • In-Memory Caching with LruCache

  • Disk Caching with DiskLruCache

  • Summary

  • Practical Questions

  • RecyclerView and Advanced Views

  • SurfaceView vs TextureView

  • Differences Between SurfaceView and TextureView

  • Summary

  • How RecyclerView Works Internally

  • Core Concepts of RecyclerView’s Internal Mechanism

  • How the Recycling Mechanism Works

  • Advantages of RecyclerView’s Object Pool Approach

  • Summary

  • 💡 Pro Tips for Mastery: How would you implement different types of items in the same RecyclerView?

  • Steps to Implement Multiple Item Types

  • Example: Implementing Multiple Item Types

  • Key Points to Note

  • Summary

  • 💡 Pro Tips for Mastery: How would you improve the performance of RecyclerView?

  • Steps to Use DiffUtil

  • Example: Implementing DiffUtil with RecyclerView

  • Key Benefits of DiffUtil

  • Considerations

  • Summary

  • Practical Questions

  • Animations and Motion

  • Animation Types in Android

  • View Property Animations

  • ObjectAnimator

  • AnimatorSet

  • ValueAnimator

  • XML-Based View Animations

  • MotionLayout

  • Drawable Animations

  • Physics-Based Animations

  • Summary

  • 💡 Pro Tips for Mastery: How interpolator works with animations?

  • Summary

  • Practical Questions

  • Window System and WebView

  • The Window System

  • Key Features of a Window

  • Window Management

  • Common Use Cases for Windows

  • Summary

  • 💡 Pro Tips for Mastery: What is WindowManager?

  • Key Responsibilities of WindowManager

  • Common Use Cases

  • Working with WindowManager

  • Limitations and Permissions

  • Summary

  • 💡 Pro Tips for Mastery: What is PopupWindow

  • Summary

  • Rendering Web Content with WebView

  • Initializing WebView

  • Loading a Web Page

  • Enabling JavaScript

  • Customizing WebView Behavior

  • Binding JavaScript to Android Code

  • Security Considerations

  • Summary

  • Practical Questions

  • Chapter 3 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Android UI

  • Exercise: Android UI Fundamentals

  • Quiz: Advanced Android UI Concepts

    3 attempts allowed

  • [Advanced Quiz] Android UI

  • Advanced Quiz: Android UI Mastery

    3 attempts allowed

  • [Chapter 4] Jetpack Libraries

  • Chapter Overview

  • AppCompat and Material Design

  • The AppCompat Library

  • Why Use AppCompat?

  • Example Usage of AppCompatActivity

  • Summary

  • Material Design Components (MDC)

  • Key Features of Material Design Components

  • Example of Using Material Button

  • Summary

  • Practical Questions

  • ViewBinding and DataBinding

  • ViewBinding

  • How ViewBinding Works

  • Advantages of ViewBinding

  • Comparison with DataBinding

  • Enabling ViewBinding

  • Summary

  • DataBinding

  • Enabling DataBinding

  • How DataBinding Works

  • Example of a DataBinding XML Layout

  • Binding Data in Code

  • Features of DataBinding

  • Advantages of DataBinding

  • Drawbacks of DataBinding

  • Summary

  • 💡 Pro Tips for Mastery: What are the differences between ViewBinding and DataBinding?

  • Key Differences

  • Summary

  • Practical Questions

  • LiveData and ViewModel

  • LiveData

  • Differences Between MutableLiveData and LiveData

  • Use Cases for LiveData

  • Summary

  • 💡 Pro Tips for Mastery: What are the differences between the setValue() and postValue() methods in LiveData?

  • 1. setValue()

  • 2. postValue()

  • Key Differences

  • Common Usage Patterns

  • Summary

  • Jetpack ViewModel

  • Features of ViewModel

  • ViewModel Creation and Usage

  • Summary

  • 💡 Pro Tips for Mastery: What is the lifecycle of a ViewModel?

  • 💡 Pro Tips for Mastery: How can ViewModel be retained even after the configuration changes?

  • Summary

  • 💡 Pro Tips for Mastery: What are the differences between Jetpack ViewModel and Microsoft’s MVVM architecture’s ViewModel?

  • Differences Between Jetpack ViewModel and MVVM ViewModel

  • Summary

  • Practical Questions

  • Jetpack Navigation

  • The Jetpack Navigation Library

  • Navigation Graph

  • NavHostFragment

  • NavController

  • Safe Args

  • Deep Linking

  • Benefits of the Jetpack Navigation Library

  • Summary

  • Practical Questions

  • Dependency Injection with Dagger and Hilt

  • Dagger 2 and Hilt

  • What is Dagger 2?

  • What is Hilt?

  • Key Differences Between Dagger 2 and Hilt

  • Annotations Provided by Hilt and Dagger 2

  • Shared Annotations (Provided by Dagger and Used by Hilt)

  • Hilt-Specific Annotations

  • Summary

  • 💡 Pro Tips for Mastery: Can you implement a manual dependency injection?

  • 💡 Pro Tips for Mastery: What are the alternative libraries for Dagger 2 and Hilt?

  • Koin: A Lightweight and Easy-to-Use DI Library

  • Key Features of Koin:

  • Example:

  • Dagger 2 vs. Koin for dependency injection?

  • Is Koin a service locator pattern?

  • Metro: A Compile-Time DI Framework for Kotlin Multiplatform

  • Key Features of Metro:

  • Example

  • Choosing the Right Library

  • Practical Questions

  • Paging and Baseline Profiles

  • The Jetpack Paging Library

  • Components of the Paging Library

  • How the Paging Library Works

  • Sample Implementation of Jetpack Paging

  • Summary

  • Baseline Profiles

  • How Baseline Profiles Work

  • Summary

  • Practical Questions

  • Chapter 4 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Jetpack Libraries

  • Exercise: Jetpack Libraries Fundamentals

  • Quiz: Advanced Jetpack Concepts

    3 attempts allowed

  • [Advanced Quiz] Jetpack Libraries

  • Advanced Quiz: Jetpack Libraries Mastery

    3 attempts allowed

  • [Chapter 5] Data and Business Logic

  • Chapter Overview

  • Background Tasks and WorkManager

  • Managing Long-Running Background Tasks

  • Using WorkManager for Persistent Tasks

  • Using Services for Continuous Tasks

  • Using Kotlin Coroutines and Dispatchers

  • Using JobScheduler for System-Level Tasks

  • Summary

  • Practical Questions

  • Serialization and Network Requests

  • JSON Serialization

  • What are Serialization and Deserialization?

  • Manual Serialization and Deserialization

  • kotlinx.serialization

  • Moshi

  • Gson

  • Choosing a Serialization Library

  • Network Requests with Retrofit and OkHttp

  • Using Retrofit for Network Requests

  • Using OkHttp for Custom HTTP Requests

  • Integrating OkHttp with Retrofit

  • Summary

  • 💡 Pro Tips for Mastery: How do you refresh the OAuth token using OkHttp Authenticator and Interceptors?

  • Using OkHttp Authenticator

  • Using OkHttp Interceptor

  • Key Differences Between Authenticator and Interceptor

  • Summary

  • 💡 Pro Tips for Mastery: What is Retrofit CallAdapter?

  • How CallAdapter Works

  • Default CallAdapter in Retrofit

  • Example: Using a Coroutine CallAdapter with Retrofit

  • Custom CallAdapter Example

  • Summary

  • Practical Questions

  • Image Loading and Pagination

  • Paging Systems for Large Datasets

  • Steps to Implement a Paging System

  • Summary

  • Image Loading from the Network

  • Glide

  • Coil

  • Fresco

  • Choosing an Image Loading Library

  • Practical Questions

  • Data Persistence and Local Storage

  • Local Data Storage in Android

  • SharedPreferences

  • DataStore

  • Room Database

  • File Storage

  • Summary

  • Practical Questions

  • Offline-First Architecture and Data Loading Patterns

  • Offline-First Architecture

  • Key Concepts for Offline-First Architecture

  • Practical Implementation

  • Offline-First Best Practices

  • Data Loading Patterns: LaunchedEffect vs. ViewModel.init()

  • Both are Anti-Patterns: Use Lazy Observation

  • Best Practices for Lazy Observation

  • Summary

  • Practical Questions

  • Chapter 5 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Data and Business Logic

  • Exercise: Data and Business Logic Fundamentals

  • Quiz: Advanced Data and Business Logic Concepts

    3 attempts allowed

  • [Advanced Quiz] Data and Business Logic

  • Advanced Quiz: Data and Business Logic Mastery

    3 attempts allowed

  • [Chapter 6] Jetpack Compose Fundamentals

  • Chapter Overview

  • Compose Architecture and Phases

  • The Structure of Jetpack Compose

  • Compose Compiler

  • Compose Runtime

  • 💡 Pro Tips for Mastery: Migrating from a gap buffer to a link table

  • Compose UI

  • Summary

  • The Compose Phases

  • Composition

  • Layout

  • Drawing

  • Summary

  • Practical Questions

  • Declarative UI and Recomposition

  • Why Jetpack Compose Is a Declarative UI Framework

  • Key Characteristics of Declarative UI in Jetpack Compose

  • Jetpack Compose vs. XML

  • Summary

  • Recomposition

  • Conditions That Trigger Recomposition

  • Recomposition and Performance

  • Summary

  • Practical Questions

  • Composable Functions and Internals

  • Compiler Transformation

  • Composition and Recomposition Internals

  • Remember and State Management

  • Summary

  • 💡 Pro Tips for Mastery: Compose Compiler and Composer

  • Transformation of Composable Functions

  • The Role of the Composer

  • Summary

  • 💡 Pro Tips for Mastery: Why Should You Avoid Calling Business Logic Directly Inside Composable Functions?

  • Examples of Side-Effect-Free and Side-Effect Composables

  • Composable Functions Can Execute in Any Order

  • Summary

  • Practical Questions

  • Stability and Performance Optimization

  • Understanding Stability

  • Stable vs. Unstable

  • Inferring Composable Functions

  • Summary

  • 💡 Pro Tips for Mastery: Smart Recomposition

  • How Smart Recomposition Works

  • Why Avoiding Unnecessary Recomposition Matters

  • Summary

  • 💡 Pro Tips for Mastery: Stability Annotations

  • @Immutable

  • @Stable

  • Differences Between @Immutable and @Stable

  • Summary

  • 💡 Pro Tips for Mastery: What Happens if You Misuse @Stable Over @Immutable?

  • Performance Optimization Strategies

  • Immutable Collections

  • Lambda Stability

  • Wrapper Classes

  • Stability Configuration File

  • Strong Skipping Mode

  • Compose Stability Analyzer

  • Summary

  • Testing Compose Performance in Release Mode

  • Impact of Debug Mode on Compose

  • Live Edit Literals and Developer Tools

  • R8 Optimization in Release Mode

  • Why Baseline Profiles Matter

  • Practical Testing Recommendations

  • Summary

  • Practical Questions

  • Composition, Migration, and Kotlin Idioms

  • Composition and How to Create It

  • Creating a Composition

  • Using the ComponentActivity.setContent() Function

  • Embedding Compose in XML Layouts

  • Summary

  • Migration Strategies from XML to Compose

  • 1. Incremental Migration

  • 2. Screen-by-Screen Migration

  • 3. Gradual Component Migration

  • 4. Full Rewrite

  • 5. Leverage Interoperability for Libraries

  • 6. Test and Monitor During Migration

  • Summary

  • 💡 Pro Tips for Mastery: Does mixing XML and Jetpack Compose impact the app size?

  • Kotlin Idioms in Jetpack Compose

  • Default Arguments

  • Higher-Order Functions and Lambda Expressions

  • Trailing Lambdas

  • Scopes and Receivers

  • Delegated Properties

  • Destructuring Data Classes

  • Singleton Objects

  • Type-Safe Builders and DSLs

  • Kotlin Coroutines

  • Summary

  • Practical Questions

  • Chapter 6 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Jetpack Compose Fundamentals

  • Exercise: Jetpack Compose Fundamentals

  • Quiz: Jetpack Compose Deep Dive

    3 attempts allowed

  • [Advanced Quiz] Jetpack Compose Fundamentals

  • Advanced Quiz: Jetpack Compose Mastery

    3 attempts allowed

  • [Chapter 7] Compose State and Side Effects

  • Chapter Overview

  • State Management and State Hoisting

  • State and Composition

  • Managing State in Compose

  • Summary

  • State Hoisting

  • Example

  • Key Advantages of State Hoisting

  • Summary

  • 💡 Pro Tips for Mastery: Stateful vs. Stateless, Understanding State Hoisting With Code

  • Practical Questions

  • Remember and RememberSaveable

  • Understanding remember

  • Understanding rememberSaveable

  • Key Differences

  • When to Use

  • Summary

  • 💡 Pro Tips for Mastery: remember and rememberSaveable internals

  • Understanding remember Internals

  • Understanding rememberSaveable Internals

  • Practical Questions

  • Coroutines in Composable Functions

  • Safely Creating Coroutine Scopes in Composables

  • Why Use rememberCoroutineScope?

  • Example Usage

  • How It Works

  • Best Practices

  • Summary

  • 💡 Pro Tips for Mastery: rememberCoroutineScope internals

  • Internal Implementation of rememberCoroutineScope

  • 1. CompositionScopedCoroutineScopeCanceller

  • 2. createCompositionCoroutineScope

  • How rememberCoroutineScope Works Internally

  • Summary

  • Safely Collecting Flows in Composable Functions

  • Using collectAsState

  • Using collectAsStateWithLifecycle

  • Choosing the Right Approach

  • Summary

  • Practical Questions

  • Side Effects and Lifecycle-Aware APIs

  • Side-Effect Handler APIs

  • LaunchedEffect: Run Suspend Functions in the Scope of a Composable

  • DisposableEffect: Effects That Require Cleanup

  • SideEffect: Publish Compose State to Non-Compose Code

  • Summary

  • rememberUpdatedState

  • How It Works

  • Use Cases

  • Explanation

  • Key Benefits

  • Summary

  • 💡 Pro Tips for Mastery: rememberUpdatedState internals

  • produceState

  • Syntax

  • Example Usage

  • Explanation of the Example

  • Benefits of produceState

  • Best Practices

  • Summary

  • 💡 Pro Tips for Mastery: produceState internals

  • Practical Questions

  • Reactive State with SnapshotFlow and DerivedState

  • snapshotFlow

  • Key Characteristics of snapshotFlow

  • When to Use snapshotFlow

  • How to Use snapshotFlow

  • How Does snapshotFlow Work Internally?

  • Things to Keep in Mind

  • Summary

  • derivedStateOf

  • When to Use derivedStateOf

  • How to Use derivedStateOf

  • How Does derivedStateOf Work?

  • Key Points to Keep in Mind

  • Advanced Example: Calculating Derived State in Real Time

  • Incorrect Usage

  • Summary

  • Practical Questions

  • Composition Lifecycle and Runtime Internals

  • Composition Lifecycle

  • 1. Initial Composition

  • 2. Recomposition

  • 3. Leaving the Composition

  • Key Points About the Composition Lifecycle

  • Summary

  • SaveableStateHolder

  • Example: SaveableStateHolder with Navigation

  • Key Concepts in the Example

  • Advantages of SaveableStateHolder

  • Summary

  • The Snapshot System

  • Why Use Snapshot.takeSnapshot()?

  • Example: Using Snapshot.takeSnapshot()

  • Explanation of the Example

  • Key Features of Snapshot.takeSnapshot()

  • Benefits of Using Read-Only Snapshots

  • Summary

  • 💡 Pro Tips for Mastery: How do you create a mutable snapshot?

  • Example: Creating and Using a Mutable Snapshot

  • Steps in the Example

  • Key Points

  • Advantages of Mutable Snapshots

  • When to Use Mutable Snapshots

  • Summary

  • mutableStateListOf and mutableStateMapOf

  • mutableStateListOf

  • mutableStateMapOf

  • Common Usages

  • Summary

  • CompositionLocals

  • Why Use CompositionLocal?

  • Example Usage

  • Summary

  • 💡 Pro Tips for Mastery: Why should you use CompositionLocal with caution?

  • compositionLocalOf: Dynamic State with Fine-Grained Recomposition

  • staticCompositionLocalOf: Efficient for Static Values

  • Recomposition Considerations

  • Summary

  • Practical Questions

  • Chapter 7 Recap

  • Chapter Summary

  • Key Terms

  • Side-Effect APIs

  • State Persistence

  • CompositionLocal APIs

  • Observable Collections

  • Important Concepts

  • What to Remember

  • [Quiz] Compose State and Side Effects

  • Exercise: Compose State and Side Effects Fundamentals

  • Quiz: Advanced Compose State and Side Effects

    3 attempts allowed

  • [Advanced Quiz] Compose State and Side Effects

  • Advanced Quiz: Compose State and Side Effects Mastery

    3 attempts allowed

  • [Chapter 8] Compose UI

  • Chapter Overview

  • Modifier System

  • What is Modifier?

  • Importance of Modifier Order

  • Commonly Used Modifiers

  • Sizing and Constraints

  • Layout Positioning

  • Scoped Modifiers

  • Summary

  • 💡 Pro Tips for Mastery: Rules for Using Modifiers

  • 1. Apply Modifiers to the Outermost Layout

  • 2. Use a Single Modifier Parameter

  • 3. Avoid Reusing Modifier Parameters Across Components

  • Summary

  • 💡 Pro Tips for Mastery: How Do You Create a Custom Modifier?

  • Composable Modifier Factory

  • composed {}

  • Modifier.Node

  • Summary

  • Practical Questions

  • Layout, Box, and Arrangement

  • The Layout Composable

  • How Layout Works

  • Key Components of Layout

  • When to Use Layout

  • Summary

  • 💡 Pro Tips for Mastery: SubcomposeLayout

  • How SubcomposeLayout Works

  • Example Usage

  • Key Considerations

  • Summary

  • Box Layout

  • How Box Works

  • Example Usage

  • Key Features

  • Summary

  • 💡 Pro Tips for Mastery: BoxWithConstraints

  • How BoxWithConstraints Works

  • Example Usage

  • Key Features

  • Summary

  • Arrangement and Alignment

  • What is Arrangement?

  • Example of Arrangement

  • What is Alignment?

  • Example of Alignment

  • Key Differences

  • Summary

  • Practical Questions

  • Images, Lists, and Pagination

  • The Painter Abstraction

  • How Painter Works

  • Example Usage

  • Key Features

  • Summary

  • Loading Images from the Network

  • Coil

  • Glide

  • Landscapist

  • Summary

  • Efficiently Rendering Large Lists

  • Using LazyColumn for Vertical Lists

  • Using LazyRow for Horizontal Lists

  • Using LazyVerticalGrid for Grid Layouts

  • Optimizing Performance with Keys

  • Summary

  • Implementing Pagination with Lazy Lists

  • Detecting Scroll Position for Pagination

  • ViewModel for Managing Pagination

  • Summary

  • Practical Questions

  • Canvas, GraphicsLayer, and Animations

  • Canvas

  • Example Usage

  • Basic Transformations

  • Summary

  • The graphicsLayer Modifier

  • How graphicsLayer Works

  • Example Usage

  • Applying Transformations

  • Translation (Moving an Element)

  • Rotation (Rotating Around X, Y, or Z Axis)

  • Clipping and Shaping

  • Alpha (Opacity Control)

  • Compositing Strategies

  • Writing a Composable to a Bitmap

  • Summary

  • Visual Animations

  • Using AnimatedVisibility for Appearance and Disappearance

  • Creating Smooth Transitions with Crossfade

  • Animating Content Changes with AnimatedContent

  • Using animate*AsState for Property Animations

  • Handling Size Changes with animateContentSize

  • Summary

  • Practical Questions

  • Navigation, Preview, and Testing

  • Navigating Between Screens

  • Manual Navigation

  • Jetpack Compose Navigation

  • 1. Defining Navigation with NavHost

  • 2. Navigating Between Screens

  • Summary

  • Compose Preview

  • Using @Preview to Render Composables

  • Customizing Previews

  • Multiple Previews with @PreviewParameter

  • Interactive Mode in Previews

  • MultiPreview Annotations

  • Summary

  • Unit Testing Compose UI

  • Setting Up Compose UI Tests

  • Testing UI Interactions

  • Synchronization and Idling Resources

  • Testing Lazy Lists

  • Verifying UI Semantics and Accessibility

  • Summary

  • Screenshot Testing

  • Compose Screenshot Testing Plugin

  • Paparazzi

  • Roborazzi

  • Summary

  • Accessibility in Jetpack Compose

  • Semantics Modifier

  • contentDescription for Images and Icons

  • Merging Semantics for Grouped Content

  • Custom Accessibility Actions

  • Testing Accessibility

  • Summary

  • Practical Questions

  • Chapter 8 Recap

  • Chapter Summary

  • Key Terms

  • Important Concepts

  • What to Remember

  • [Quiz] Compose UI

  • Exercise: Compose UI Fundamentals

  • Quiz: Compose UI Concepts

    3 attempts allowed

  • [Advanced Quiz] Compose UI

  • Advanced Quiz: Compose UI Mastery

    3 attempts allowed

  • Final Words

  • Glossary

  • Android Framework

  • Android System and Performance

  • Android UI

  • Jetpack Libraries

  • Data and Business Logic

  • Jetpack Compose Fundamentals

  • Compose State and Side Effects

  • Compose UI

The Leanpub 60 Day 100% Happiness Guarantee

Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

So, there's no reason not to click the Add to Cart button, is there?

See full terms...

Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earned over $14 million writing, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub