---
title: "Tag: kotlin | Shreyas Patil's Blog"
description: "Senior Android Engineer @ Deliveroo. Google Developer Expert for Android. Writing about Android, Kotlin, and AI."
image: "https://blog.shreyaspatil.dev/og.png"
---

# Tag:kotlin

All the articles with the tag "kotlin".

# Tag:kotlin

- [![](https://blog.shreyaspatil.dev/_astro/cover-stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode.DqtpYBkn_2rJuVb.webp)](https://blog.shreyaspatil.dev/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode)[## Stop Ignoring Compose Stability (Yes, Even with Strong Skipping Mode)](https://blog.shreyaspatil.dev/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode)3 Aug, 2026Strong Skipping Mode doesn't make Compose stability obsolete. Discover the hidden referential equality trap causing silent recompositions in your app.
- [![](https://blog.shreyaspatil.dev/_astro/cover-inside-subcomposelayout-jetpack-composes-most-misunderstood-api.cJKPADTC_1gDsFf.webp)](https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api)[## Inside SubcomposeLayout: Jetpack Compose’s Most Misunderstood API](https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api)10 Jul, 2026A deep dive into the internals of SubcomposeLayout in Jetpack Compose. Learn how subcomposition actually works, why it breaks the phase rules, and the real node-thrashing cost it carries.
- [![](https://blog.shreyaspatil.dev/_astro/cover-the-future-of-android-apps-with-appfunctions.BqdOiD9T_2jRkYO.webp)](https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions)[## The Future of Android Apps with AppFunctions](https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions)30 Mar, 2026Explore the potential of Android AppFunctions for AI agents. Learn how apps can share functionality with intelligent assistants using self-describing functions.
- [![](https://blog.shreyaspatil.dev/_astro/cover-exploring-compositionlocal-api-internals-in-jetpack-compose.fvBkcosn_16DPCk.webp)](https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose)[## Exploring CompositionLocal API internals in Jetpack Compose](https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose)9 Mar, 2026Deep dive into the internals of Jetpack Compose's CompositionLocal API. Trace how data flows implicitly through the composition tree under the hood.
- [![](https://blog.shreyaspatil.dev/_astro/cover-a-simple-key-to-a-better-lazylist-in-jetpack-compose.CPKVZHSX_2vSNOn.webp)](https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose)[## A Simple key to a Better LazyList in Jetpack Compose](https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose)8 Oct, 2025Learn how to optimize Jetpack Compose LazyList performance using keys. Understand how keys help reduce recompositions and improve scrolling efficiency.
- [![](https://blog.shreyaspatil.dev/_astro/cover-exploring-pausablecomposition-internals-in-jetpack-compose.DzUbTICL_1r8P8P.webp)](https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose)[## Exploring PausableComposition internals in Jetpack Compose](https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose)14 Jul, 2025Explore the internals of PausableComposition in Jetpack Compose. Learn how Compose manages state and effects when a composition is paused or resumed.
- [![](https://blog.shreyaspatil.dev/_astro/cover-deep-dive-into-annotations-in-jetpack-compose.DenxnPOw_ZodImK.webp)](https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose)[## Deep dive into annotations in Jetpack Compose](https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose)19 May, 2025An extensive deep dive into annotations in Jetpack Compose. Understand how @Composable, @Stable, @ReadOnlyComposable, and others work under the hood.
- [![](https://blog.shreyaspatil.dev/_astro/cover-understanding-dispatchers-main-and-mainimmediate.BDl5NICs_ZipbbY.webp)](https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate)[## Understanding Dispatchers: Main and Main.immediate](https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate)2 Apr, 2025A deep dive into Kotlin Coroutine Dispatchers. Understand the subtle but important difference between Dispatchers.Main and Dispatchers.Main.immediate in Android.
- [![](https://blog.shreyaspatil.dev/_astro/cover-51-my-developer-blogging-journey-so-far.FSzKaezF_Z1DeY4.webp)](https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far)[## #51 - My developer blogging journey so far](https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far)18 Feb, 2025A personal account of my journey as a tech blogger, from my first post in 2019 to becoming a GDE. Insights on English barriers, criticism, and why sharing matters.
- [![](https://blog.shreyaspatil.dev/_astro/cover-benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose.rII8V07o_1Hqush.webp)](https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose)[## Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose](https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose)19 Nov, 2024Performance benchmarks of direct state propagation vs. lambda-based state in Jetpack Compose. Learn which approach minimizes recompositions for better UI performance.
- [![](https://blog.shreyaspatil.dev/_astro/cover-skipping-the-invocation-of-intermediate-composables.HfKt_krd_Z2lXtL1.webp)](https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables)[## Skipping the invocation of intermediate composables](https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables)11 Nov, 2024Learn how Jetpack Compose optimizes UI rendering by skipping intermediate composables. Understand how to design your UI for maximum performance.
- [![](https://blog.shreyaspatil.dev/_astro/cover-kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea.97gvJmqw_Z21we6P.webp)](https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea)[## Kotlin Exception Handling: Why Singleton Exceptions are a bad idea](https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea)18 Sep, 2024Understand why using singleton exceptions in Kotlin can be a bad practice and how it affects stack traces and debugging in your applications.
- [![](https://blog.shreyaspatil.dev/_astro/cover-effortless-compose-compiler-report-analysis.BD7xTqJw_ZXaPsp.webp)](https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis)[## Effortless Compose Compiler report analysis](https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis)20 May, 2024A guide to analyzing Jetpack Compose compiler reports easily. Learn how to diagnose stability and skippability of your composables for better performance.
- [![](https://blog.shreyaspatil.dev/_astro/cover-capturing-composable-to-a-bitmap-without-losing-a-state.BUugysfk_Z2tXncG.webp)](https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state)[## Capturing composable to a bitmap without losing a state](https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state)20 Mar, 2024Learn how to capture a Jetpack Compose Composable as a Bitmap without losing its current state. A deep dive into capturing high-quality UI screenshots programmatically.
- [![](https://blog.shreyaspatil.dev/_astro/cover-rich-media-input-from-the-keyboard-in-compose.DGIXdtxf_Z2iiinQ.webp)](https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose)[## Rich media input from the keyboard in Compose](https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose)1 Mar, 2024Learn how to handle rich media input (like GIFs and images) from the keyboard in Jetpack Compose, essential for modern chat applications.
- [![](https://blog.shreyaspatil.dev/_astro/cover-collecting-items-from-the-flow-in-chunks.C0GB2o1l_ZF6UBn.webp)](https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks)[## Collecting items from the Flow in chunks💦](https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks)23 Oct, 2023Learn how to collect Kotlin Flow items in chunks or intervals without losing data. A practical guide to handling high-frequency data streams efficiently.
- [![](https://blog.shreyaspatil.dev/_astro/cover-runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization.BuZpygJw_Z23E48N.webp)](https://blog.shreyaspatil.dev/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization)[## Runtime Surprise: Kotlin Breaks Non-Nullability Promise on Developer Cheating in Field Initialization](https://blog.shreyaspatil.dev/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization)20 Sep, 2023A cautionary tale about Kotlin's non-nullability. Discover how incorrect field initialization can lead to unexpected NullPointerExceptions at runtime.
- [![](https://blog.shreyaspatil.dev/_astro/cover-solving-the-mystery-of-recompositions-in-composes-lazylist.F-qZjUnS_RprVH.webp)](https://blog.shreyaspatil.dev/solving-the-mystery-of-recompositions-in-composes-lazylist)[## Solving the mystery of recompositions in Compose's LazyList](https://blog.shreyaspatil.dev/solving-the-mystery-of-recompositions-in-composes-lazylist)21 Aug, 2023Debugging recompositions in Jetpack Compose LazyLists. Learn why your list items might be recomposing unnecessarily and how to fix it.
- [![](https://blog.shreyaspatil.dev/_astro/cover-sleepless-concurrency-delay-vs-threadsleep.qFiypeQo_Z1xK0Mt.webp)](https://blog.shreyaspatil.dev/sleepless-concurrency-delay-vs-threadsleep)[## Sleepless Concurrency: delay() vs. Thread.sleep()](https://blog.shreyaspatil.dev/sleepless-concurrency-delay-vs-threadsleep)31 Jul, 2023Explore the difference between delay() and Thread.sleep() in Kotlin. Understand how non-blocking concurrency works from a platform perspective.
- [![](https://blog.shreyaspatil.dev/_astro/cover-permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions.CLxOSnO4_Z1h67T1.webp)](https://blog.shreyaspatil.dev/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions)[## PermissionFlow: A Reactive API for knowing the status of Android app permissions](https://blog.shreyaspatil.dev/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions)22 May, 2023Introduction to PermissionFlow: A reactive API for Android that simplifies tracking permission status changes using Kotlin Coroutines and Flow.

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Shreyas Patil's Blog",
  "url": "https://blog.shreyaspatil.dev/",
  "description": "Senior Android Engineer @ Deliveroo. Google Developer Expert for Android. Writing about Android, Kotlin, and AI.",
  "author": {
    "@type": "Person",
    "name": "Shreyas Patil",
    "url": "https://shreyaspatil.dev/"
  }
}
```
