<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kamaldeep Kakkar</title>
    <description>The latest articles on DEV Community by Kamaldeep Kakkar (@kamaldeep_kakkar_8a1a740e).</description>
    <link>https://dev.to/kamaldeep_kakkar_8a1a740e</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3628825%2Fb4a784d4-46de-482f-82a5-5b3f1d30d01d.png</url>
      <title>DEV Community: Kamaldeep Kakkar</title>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kamaldeep_kakkar_8a1a740e"/>
    <language>en</language>
    <item>
      <title>👉 How to Reduce Android Build Time: Proven Tips for Faster Builds</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Sat, 20 Dec 2025 15:21:06 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/how-to-reduce-android-build-time-proven-tips-for-faster-builds-2ad</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/how-to-reduce-android-build-time-proven-tips-for-faster-builds-2ad</guid>
      <description>&lt;p&gt;Slow Android builds are more than an inconvenience — they break your feedback loop and hurt developer productivity.&lt;br&gt;
If your project takes several minutes to build after small changes, something is wrong.&lt;/p&gt;

&lt;p&gt;After working on a medium-to-large Android codebase, I focused on fixing build-time bottlenecks instead of adding more hardware. The result: incremental builds dropped from ~10 minutes to 2–4 minutes.&lt;/p&gt;

&lt;p&gt;Here’s what actually worked.&lt;/p&gt;

&lt;p&gt;🧠 Why Android Builds Become Slow&lt;/p&gt;

&lt;p&gt;Most slow builds come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monolithic modules&lt;/li&gt;
&lt;li&gt;Heavy annotation processing (KAPT)&lt;/li&gt;
&lt;li&gt;Poor Gradle configuration&lt;/li&gt;
&lt;li&gt;Too many exposed dependencies&lt;/li&gt;
&lt;li&gt;Lack of incremental compilation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fix isn’t a single flag—it’s a combination of optimizations.&lt;/p&gt;

&lt;p&gt;1️⃣ Optimize Gradle Configuration (Start Here)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In gradle.properties:

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this helps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reuses the Gradle process&lt;/li&gt;
&lt;li&gt;Builds independent modules in parallel&lt;/li&gt;
&lt;li&gt;Skips tasks that haven’t changed&lt;/li&gt;
&lt;li&gt;Avoids configuring unused modules meaningfully&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 This alone can reduce build time by 30–50%.&lt;/p&gt;

&lt;p&gt;2️⃣ Enable Configuration Cache (Gradle 8+)&lt;/p&gt;

&lt;p&gt;Gradle 8 introduced Configuration Cache, which stores the task graph from previous builds.&lt;/p&gt;

&lt;p&gt;Instead of re-configuring everything on every build, Gradle reuses what it already knows.&lt;/p&gt;

&lt;p&gt;Result: faster subsequent builds, especially during local development.&lt;/p&gt;

&lt;p&gt;3️⃣ Replace KAPT with KSP&lt;/p&gt;

&lt;p&gt;KAPT is slow because it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generates Java stubs&lt;/li&gt;
&lt;li&gt;Breaks incremental compilation&lt;/li&gt;
&lt;li&gt;Adds unnecessary overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;KSP is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kotlin-native&lt;/li&gt;
&lt;li&gt;Incremental&lt;/li&gt;
&lt;li&gt;Much faster
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Before
kapt("com.google.dagger:hilt-compiler")

// After
ksp("com.google.dagger:hilt-compiler")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you’re using Hilt, Room, or Moshi, this change alone can give a noticeable speed boost.&lt;/p&gt;

&lt;p&gt;4️⃣ Modularize Your Project (Biggest Long-Term Win)&lt;/p&gt;

&lt;p&gt;Monolithic projects force Gradle to recompile too much code.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
app (everything)&lt;/p&gt;

&lt;p&gt;Prefer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:core
:domain
:data
:feature:login
:feature:home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster incremental builds&lt;/li&gt;
&lt;li&gt;Better parallel execution&lt;/li&gt;
&lt;li&gt;Cleaner architecture&lt;/li&gt;
&lt;li&gt;Easier ownership at scale&lt;/li&gt;
&lt;li&gt;This is often the single biggest build-time improvement in large apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5️⃣ Prefer implementation Over api&lt;/p&gt;

&lt;p&gt;Using api exposes dependencies to downstream modules and forces recompilation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Prefer this
implementation("com.squareup.retrofit2:retrofit")

// Avoid unless required
api("com.squareup.retrofit2:retrofit")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rule of thumb:&lt;br&gt;
If a dependency is not part of the public contract, it should be implementation.&lt;/p&gt;

&lt;p&gt;This improves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build performance&lt;/li&gt;
&lt;li&gt;Encapsulation&lt;/li&gt;
&lt;li&gt;Long-term maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6️⃣ Disable Unused Android Build Features&lt;/p&gt;

&lt;p&gt;Every enabled feature adds build work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;android {
    buildFeatures {
        viewBinding = true
        dataBinding = false
        aidl = false
        renderScript = false
        shaders = false
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only enable what you actually use.&lt;/p&gt;

&lt;p&gt;7️⃣ Measure Before Optimizing&lt;/p&gt;

&lt;p&gt;Don’t guess.&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build Analyzer&lt;/li&gt;
&lt;li&gt;Gradle Build Scan (--scan)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Measure first, then optimize the real bottleneck.&lt;br&gt;
Blind optimization often wastes time.&lt;/p&gt;

&lt;p&gt;✅ Final Results&lt;/p&gt;

&lt;p&gt;By combining these techniques:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clean Gradle setup&lt;/li&gt;
&lt;li&gt;KSP instead of KAPT&lt;/li&gt;
&lt;li&gt;Proper modularization&lt;/li&gt;
&lt;li&gt;Dependency hygiene&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Incremental builds dropped from ~10 minutes to 2–4 minutes.&lt;/p&gt;

&lt;p&gt;🧠 Key Takeaway&lt;/p&gt;

&lt;p&gt;Reducing Android build time isn’t about one magic flag.&lt;br&gt;
It’s about measuring, understanding the bottleneck, and applying the right optimizations.&lt;/p&gt;

&lt;p&gt;If your builds are slow, your feedback loop is broken.&lt;/p&gt;

</description>
      <category>android</category>
      <category>androiddev</category>
      <category>kotlin</category>
      <category>mobile</category>
    </item>
    <item>
      <title>What is produceState in Jetpack Compose? Real Use Cases, Examples &amp; Best Practices</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Mon, 08 Dec 2025 14:26:54 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/what-is-producestate-in-jetpack-compose-real-use-cases-examples-best-practices-2je7</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/what-is-producestate-in-jetpack-compose-real-use-cases-examples-best-practices-2je7</guid>
      <description>&lt;p&gt;produceState is one of the most underrated but powerful APIs in Jetpack Compose. It acts as a bridge between coroutines and state—the moment your suspend function updates a value, Compose updates the UI automatically.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;In this article, I break down:&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What produceState actually does&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it's more than just a helper function&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Internal working (with lifecycle + coroutine cancellation)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-world use cases like API calls, flows, timers &amp;amp; listeners&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Best practices and mistakes to avoid&lt;/p&gt;

&lt;p&gt;If you're building real Android apps with Compose, understanding produceState will make your async UI code cleaner and safer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kamaldeepkakkar/what-is-producestate-in-jetpack-compose-real-use-cases-examples-best-practices-e228f597f08a" rel="noopener noreferrer"&gt;Read the full guide here:&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>jetpackcompose</category>
      <category>androiddev</category>
    </item>
    <item>
      <title>Channels in Kotlin Coroutines: A Complete Q&amp;A Guide for Android Apps</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Sat, 06 Dec 2025 14:38:37 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/channels-in-kotlin-coroutines-a-complete-qa-guide-for-android-apps-4ppc</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/channels-in-kotlin-coroutines-a-complete-qa-guide-for-android-apps-4ppc</guid>
      <description>&lt;p&gt;hannels are one of the most underrated features in Kotlin Coroutines. They solve problems that Flow alone cannot — especially when you're dealing with concurrency, event streams, or multi-producer pipelines in Android apps.&lt;/p&gt;

&lt;p&gt;I’ve created a complete Q&amp;amp;A guide that covers:&lt;/p&gt;

&lt;p&gt;What exactly Channels are&lt;/p&gt;

&lt;p&gt;How they work under the hood&lt;/p&gt;

&lt;p&gt;Channel vs Flow vs SharedFlow vs callbackFlow&lt;/p&gt;

&lt;p&gt;Real Android use cases (MVI event streams, background tasks, producer–consumer patterns)&lt;/p&gt;

&lt;p&gt;Advanced interview questions with detailed answers&lt;/p&gt;

&lt;p&gt;If you want to strengthen your Coroutines knowledge or prepare for Android interviews, this guide is made for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kamaldeepkakkar/channels-in-kotlin-coroutines-complete-q-a-guide-for-android-apps-4e1d5d0c425b" rel="noopener noreferrer"&gt;👉 Read the full article here:&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>androiddev</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Mastering Side Effects in Jetpack Compose</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Wed, 03 Dec 2025 15:13:04 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/mastering-side-effects-in-jetpack-compose-3j4k</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/mastering-side-effects-in-jetpack-compose-3j4k</guid>
      <description>&lt;p&gt;If you're building modern Android apps with Jetpack Compose, understanding side effects is non-negotiable.&lt;br&gt;
Compose is declarative, which means the UI can recompose many times — and that creates challenges if you trigger actions directly inside a Composable.&lt;/p&gt;

&lt;p&gt;This is where side effects come in.&lt;/p&gt;

&lt;p&gt;✔ Why Side Effects Matter&lt;/p&gt;

&lt;p&gt;Actions like API calls, logging, toasts, or starting coroutines should not run during recomposition.&lt;br&gt;
Compose gives us dedicated APIs to handle them properly:&lt;/p&gt;

&lt;p&gt;🔹 LaunchedEffect&lt;/p&gt;

&lt;p&gt;Run suspend functions safely when a key changes (or once).&lt;/p&gt;

&lt;p&gt;🔹 DisposableEffect&lt;/p&gt;

&lt;p&gt;Perfect for registering/unregistering listeners or other setup/cleanup logic.&lt;/p&gt;

&lt;p&gt;🔹 SideEffect&lt;/p&gt;

&lt;p&gt;Push Compose state to external objects.&lt;/p&gt;

&lt;p&gt;🔹 rememberCoroutineScope&lt;/p&gt;

&lt;p&gt;Launch coroutines from events like button clicks.&lt;/p&gt;

&lt;p&gt;🔹 snapshotFlow&lt;/p&gt;

&lt;p&gt;Turn Compose state into a Flow stream.&lt;/p&gt;

&lt;p&gt;🔹 produceState&lt;/p&gt;

&lt;p&gt;Convert async data sources directly into Compose State.&lt;/p&gt;

&lt;p&gt;I’ve written a complete breakdown of each API with real-world examples from production-level Android apps. If you’re working with Compose seriously, this will save you from subtle but painful bugs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kamaldeepkakkar/mastering-side-effects-in-jetpack-compose-a-complete-guide-for-real-android-apps-80891dfb19c6" rel="noopener noreferrer"&gt;Read the full article here.&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How async and await Handle Errors in Kotlin Coroutines</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Fri, 28 Nov 2025 09:31:05 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/how-async-and-await-handle-errors-in-kotlin-coroutines-3kle</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/how-async-and-await-handle-errors-in-kotlin-coroutines-3kle</guid>
      <description>&lt;p&gt;How async and await Handle Errors in Kotlin Coroutines&lt;/p&gt;

&lt;p&gt;In this article, we will discuss how error handling works in Kotlin Coroutines when we are using async, await(), and awaitAll()&lt;/p&gt;

&lt;p&gt;Why Error Handling in async is Different from launch❗&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;launch = (fire — and — forget)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It does not return any value&lt;br&gt;
If something fails inside launch, there is no place to store the exception&lt;br&gt;
➡️ So it throws immediately&lt;br&gt;
➡️ Exception cancels the parent scope (fail-fast)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;async = produces a value (Deferred)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It returns a Deferred: it is like a promise/future&lt;br&gt;
It holds: success result OR exception&lt;br&gt;
➡️ Exceptions inside async are captured, not thrown&lt;br&gt;
➡️ They only get thrown when we do await()&lt;/p&gt;

&lt;p&gt;Read the full article here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kamaldeepkakkar/day-2-how-async-and-await-handle-errors-in-kotlin-coroutines-639fd1e87181" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>kotlin</category>
      <category>androiddev</category>
    </item>
    <item>
      <title>Why Error Handling Matters in Kotlin Coroutines (launch {} Explained)</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Thu, 27 Nov 2025 15:35:17 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/why-error-handling-matters-in-kotlin-coroutines-launch-explained-dkm</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/why-error-handling-matters-in-kotlin-coroutines-launch-explained-dkm</guid>
      <description>&lt;p&gt;Kotlin coroutines made asynchronous programming clean and structured.&lt;br&gt;
*&lt;em&gt;But Error handling is where most developers struggle.&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
I break down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; How launch {} handles failures &lt;/li&gt;
&lt;li&gt; Why exceptions propagate and cancel sibling coroutines &lt;/li&gt;
&lt;li&gt; What “fail-fast” really means &lt;/li&gt;
&lt;li&gt; How to avoid unexpected crashes in your ViewModel&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📖 Read the full article here:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kamaldeepkakkar/day-1-why-error-handling-in-kotlin-coroutines-matters-understanding-failures-inside-launch-bf3ced59ddec%20(https://medium.com/@kamaldeepkakkar/day-1-why-error-handling-in-kotlin-coroutines-matters-understanding-failures-inside-launch-bf3ced59ddec)" rel="noopener noreferrer"&gt;Full Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>androiddev</category>
      <category>kotlin</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Deep Dive into Jetpack Compose Architecture -Compiler, Runtime, and UI Explained</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Wed, 26 Nov 2025 12:16:10 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/deep-dive-into-jetpack-compose-architecture-compiler-runtime-and-ui-explained-2hcf</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/deep-dive-into-jetpack-compose-architecture-compiler-runtime-and-ui-explained-2hcf</guid>
      <description>&lt;p&gt;Jetpack Compose isn’t just a UI-builder — it’s a full architecture:** compiler + runtime + UI toolkit**. Understanding what happens behind the scenes helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;debug complex UI/state issues,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;optimize performance &amp;amp; rendering,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;design scalable and maintainable UI architecture in Kotlin + Compose.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full article here → (&lt;a href="https://medium.com/stackademic/deep-dive-into-jetpack-compose-architecture-compiler-runtime-and-ui-explained-f2ad819e4826" rel="noopener noreferrer"&gt;https://medium.com/stackademic/deep-dive-into-jetpack-compose-architecture-compiler-runtime-and-ui-explained-f2ad819e4826&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;#Android #AndroidDev #JetpackCompose #Kotlin #MobileDevelopment &lt;/p&gt;

</description>
      <category>android</category>
      <category>jetpackcompose</category>
      <category>androiddev</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Parallel API Calls in Kotlin: async vs Flow.zip vs Flow.combine (Complete Guide)</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Tue, 25 Nov 2025 13:59:38 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/parallel-api-calls-in-kotlin-async-vs-flowzip-vs-flowcombine-complete-guide-2c31</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/parallel-api-calls-in-kotlin-async-vs-flowzip-vs-flowcombine-complete-guide-2c31</guid>
      <description>&lt;p&gt;🚀 Very Common Use Case in Android: Parallel API Calls in Kotlin&lt;/p&gt;

&lt;p&gt;Whether you're loading profile + dashboard + notifications together or fetching multiple endpoints for one screen — parallel execution matters for performance.&lt;/p&gt;

&lt;p&gt;In Kotlin/Android, we mostly use these three approaches 👇&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;async&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;➡️ “Start now, collect later.”&lt;/p&gt;

&lt;p&gt;Best when you need true parallel execution inside coroutines and want control over error handling and cancellation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flow.zip&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;➡️ “Wait for everyone, then emit once.”&lt;/p&gt;

&lt;p&gt;Use when results must be paired positionally — like page 1 with page 1, page 2 with page 2. Perfect for synchronized emissions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flow.combine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;➡️ “Emit whenever anyone updates.”&lt;/p&gt;

&lt;p&gt;Use when streams emit independently and UI should update whenever any source changes, like real-time data + cached data.&lt;/p&gt;

&lt;p&gt;Read the full article here: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/stackademic/parallel-api-calls-in-kotlin-async-vs-flow-zip-vs-flow-combine-complete-guide-87515bcc57e5" rel="noopener noreferrer"&gt;https://medium.com/stackademic/parallel-api-calls-in-kotlin-async-vs-flow-zip-vs-flow-combine-complete-guide-87515bcc57e5&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>androiddev</category>
      <category>mobile</category>
      <category>kotlin</category>
    </item>
    <item>
      <title>Debounce, Throttle &amp; Sample in Kotlin Flow — When to Use Which?</title>
      <dc:creator>Kamaldeep Kakkar</dc:creator>
      <pubDate>Tue, 25 Nov 2025 13:15:36 +0000</pubDate>
      <link>https://dev.to/kamaldeep_kakkar_8a1a740e/debounce-throttle-sample-in-kotlin-flow-when-to-use-which-23ml</link>
      <guid>https://dev.to/kamaldeep_kakkar_8a1a740e/debounce-throttle-sample-in-kotlin-flow-when-to-use-which-23ml</guid>
      <description>&lt;p&gt;When building modern Android apps with Coroutines and Flow, we often need to control “how often” we react to events — typing, clicking, scrolling, sensor updates, etc.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Three main operators help us to do this:&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Debounce&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Throttle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sample&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These terms sound similar, but their behavior is very different.&lt;br&gt;
This article explains them in simple language, real-world analogies, and Android use-cases — with Jetpack Compose focus.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Debounce: Wait until the user stops typing -&amp;gt; Best For Search box&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Throttle: Allow only one event in a time window -&amp;gt; Best For Button taps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sample: Sensors/rapid data -&amp;gt; Best For Take the latest value every X ms&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read full Article Here :&lt;br&gt;
&lt;a href="https://medium.com/stackademic/debounce-throttle-sample-in-kotlin-flow-when-to-use-which-86b3781038d9" rel="noopener noreferrer"&gt;https://medium.com/stackademic/debounce-throttle-sample-in-kotlin-flow-when-to-use-which-86b3781038d9&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>androiddev</category>
      <category>flow</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
