Responsible Nguyễn Trung Dũng
Last Update 04/10/2023
Completion Time 1 day 18 hours 36 minutes
Members 2
  • Phần 1: Introduction
    • 001 Extended Course Preview
    • 002 Course Structure and Goals
    • 003 How to get the source code of the Sample Project
    • 004 Basis Setup of Sample Project
  • Phần 2: Different Approaches for Asynchronous Programming
    • 001 Section Introduction
    • 002 What is Asynchronous Programming
    • 003 Use Case Explanation
    • 004 Callback Implementation
    • 005 RxJava Implementation
    • 006 Coroutines Implementation
    • 007 Comparing Approaches
    • 008 Recap
  • Phần 3: Coroutine Fundamentals
    • 14. Routines and Coroutines
    • 15. Suspend Functions
    • 16. Coroutnes and Threads
    • 004 Blocking VS Suspending
    • 005 Multithreaded Coroutines
    • 006 Internal working
    • 007 How Daley () works
    • 008 Section Recap
  • Phần 4: Performing Network Requests sequentially
    • 001 Introduction
    • 002 Adding Coroutines to your project
    • 003 Coroutine Builders: Launch and Runbloking
    • 004 Main-safety
    • 005 Basic error handling with try-catch
    • 006 Exercise 1
    • 007 Exercise 1 Solution
    • 008 Section Recap
  • Phần 5: Performing Network Requests concurently
    • 001 Section Introduction
    • 002 UseCase description
    • 003 Implementing UseCase#3 in a sequential way
    • 004 The async coroutine builder
    • 005 Implementing UseCase#3 in a concurrent way
    • 006 Implementing UseCase#4 in a sequential way
    • 007 Exercise 2 Implementing UseCase#4 in a concurrent way
    • 008 Exercise 2 Solution
    • 009 Section Recap
  • Phần 6: Higher-Order Functions
    • Preview
    • 002 Implementing retries
    • 003 Extract retry logic into higher order function
    • 004 Add exponential backoff to retry
    • 005 Exercise 3 Combining retries and timeout
    • 006 Exercise 3 Solution
    • 007 Section Recap
  • Phần 7: Using Room with Coroutines
    • 001 Section Introduction
    • 002 UseCase description
    • 003 UseCase Implementation
    • 004 Section Recap
  • Phần 8: Background Processing with Coroutines
    • 001 Section Introduction
    • 002 UseCase explanation
    • 003 Implementation running on Main Thread
    • 004 Coroutine Context
    • 005 Coroutine Dispatchers
    • 006 Using withContext for context switching
    • 007 Coroutine Scope VS Coroutine Context
    • 008 Exercise4 Perform calculation in several Coroutines
    • 009 Exercise 4 Solution
    • 010 Performance Analysis
    • 011 Section Recap
  • Phần 9: Structured Concurrency and Coroutine Scopes
    • 001 Section Introduction
    • 002 The unhappy path
    • 003 Structured Concurrency
    • 004 Coroutine Scopes
    • 005 Building up the Job Hierarchy
    • 006 Parents wait for Children
    • 007 Cancellation of parent and child jobs
    • 008 Job and SupervisorJob
    • 009 Unstructured Concurrency
    • Preview
    • 011 ViewModelScope
    • 012 LifecycleScope
    • 013 Scoping Functions coroutineScope{} and supervisorScope{}
    • 014 Continue Coroutine execution when the user leaves the screen
    • 015 Section Recap
  • Phần 10: Coroutines Cancellation
    • 001 Cancelling Coroutines
    • 002 Cooperative Cancellation
    • 003 NonCancellable Code
    • 004 Making UseCase10 cooperative regarding cancellation
    • 005 Section Recap
  • Phần 11: Coroutines Exception Handling
    • 001 Section Introduction
    • 002 Exception Handling with try-catch
    • 003 Coroutine Exception Handler
    • 004 Try-Catch VS Coroutine Exception Handler
    • 005 launch{} VS async{}
    • 006 Exception Handling specifics of coroutineScope{}
    • 007 Exception Handling specifics of supervisorScope{}
    • 008 Implementation of UseCase13 with try-catch
    • 009 Implementation of UseCase13 with CoroutineExceptionHandler
    • 010 Implementation of UseCase13 - show results even if a child coroutine fails
    • 011 Rethrowing CancellationExceptions
    • 012 Coroutines Exception Handling Cheat Sheet
    • 013 Conference Talk Exception Handling in Kotlin Coroutines
    • 014 Section Recap
  • Phần 12: Testing Coroutines
    • 001 Section Introduction
    • Important information
    • 003 General Unit Testing Approach
    • 004 Using the TestCoroutineDispatcher for our first unit test
    • 005 Testing the unhappy path
    • 006 Creating a JUnit4 Rule for Testing Coroutine-based code
    • 007 Excercise 5 Create a Unit Test for UseCase2
    • 008 Solution Exercise 5
    • 009 runBlockingTest{} and VirtualTime
    • 010 Testing sequential and concurrent execution
    • 011 Testing Timeouts (UseCase5) and Retries (UseCase 6)
    • 012 Testing implementations that use Dispatchers.Default or Dispatchers.IO
    • 013 TestCoroutineScope and Controlling Coroutine Execution
    • 014 Section Recap
  • Phần 13: Basics of Kotlin Flow
    • Kotlin Coroutines and Flow for Android Development [2023]; Section Introduction
    • What is a Flow?
    • Reactive Programming
    • Starting our first Flow Use Case
    • Basic Flow Builders
    • Displaying the stock list on the screen
    • Basic terminal operators
    • Terminal operator
    • Kotlin Coroutines and Flow for Android Development [2023]; Using launchln() in UseCase1
    • Lifecycle operators
    • Terminal operator "asLiveData"
    • 013 Basic Intermediate Operators
    • 014 Exercise Intermediate Operators
    • 015 Exercise Solution
    • 016 Section Recap
    • Slides of the Section
  • Phần 14: Flow Exception Handing and Cancellation
    • 001 Flow Exception Handling
    • 002 Exception Transparency
    • 003 The retry() Operator
    • 004 Exercise Flow Exception Handling
    • 005 Exercise Solution
    • 006 Flow Cancellation
    • Slides of the Section
  • Phần 15: State Flow and SharedFlow
    • 001 Exposing Flows instead of LiveData in the ViewModel
    • 002 Naive Approach - Exposing regular Flows
    • 003 Lifecycle-aware Coroutines with repeatOnLifecycle()
    • 004 Flows are cold
    • 005 SharedFlows are hot
    • 006 Converting Flows to SharedFlows with shareIn()
    • 007 Keeping the upstream Flow alive during configuration changes
    • 008 The replay parameter
    • 009 StateFlow
    • 010 Converting Flows to StateFlows with stateIn()
    • 011 SharedFlow VS StateFlow
    • 012 Section Recap
    • Slides of the Section
  • Phần 16: Channels
    • 001 Channels for Android Development
    • Single UI Events
    • Slides of the Section
  • Phần 17: Concurrent Flows
    • Important information
    • 002 The buffer() operator
    • 003 Dealing with Backpressure (aka BufferOverflow)
    • 004 collectLatest(), mapLatest() and transformLatest()
    • 005 The conflate() operator
    • Phần 17; 006 Buffers in SharedFlows and StateFlows
    • Slides of the Section
  • Phần 18: Thank you and Bonus
    • 001 Thank you and Bonus