# Shreyas Patil's Blog

Senior Android Engineer @ Deliveroo. Google Developer Expert for Android. Writing about Android, Kotlin, and AI.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Stop Ignoring Compose Stability (Yes, Even with Strong Skipping Mode)

DevFeed: [Stop Ignoring Compose Stability (Yes, Even with Strong Skipping Mode)](<https://devfeed.tech/articles/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode-25753.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode/>)

Author: Shreyas Patil

Published: 2026-08-03T04:30:00Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-compiler](<https://devfeed.tech/tags/compose-compiler.md>), [compose-stability](<https://devfeed.tech/tags/compose-stability.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recomposition](<https://devfeed.tech/tags/recomposition.md>)

### AI overview

This article explains why Compose stability still matters when Strong Skipping Mode is enabled. It describes how unstable parameters are compared by instance equality, which can prevent composables from skipping and lead to unnecessary recompositions, and discusses automatic lambda memoization.

### Source excerpt

Strong Skipping Mode doesn't make Compose stability obsolete. Discover the hidden referential equality trap causing silent recompositions in your app.

## Inside SubcomposeLayout: Jetpack Compose's Most Misunderstood API

DevFeed: [Inside SubcomposeLayout: Jetpack Compose's Most Misunderstood API](<https://devfeed.tech/articles/inside-subcomposelayout-jetpack-compose-s-most-misunderstood-api-25730.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api/>)

Author: Shreyas Patil

Published: 2026-07-10T12:05:00Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [internals](<https://devfeed.tech/tags/internals.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [learn](<https://devfeed.tech/tags/learn.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-optimization](<https://devfeed.tech/tags/performance-optimization.md>), [ui](<https://devfeed.tech/tags/ui.md>), [uiux](<https://devfeed.tech/tags/uiux.md>)

### AI overview

A deep dive into Jetpack Compose's SubcomposeLayout, explaining how it performs composition during measurement or placement, stalls the normal layout pipeline, and can create performance costs. The article also outlines when standard custom layouts or SubcomposeLayout are appropriate.

### Source excerpt

A 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.

## Building My Dream Developer Blog with Astro, Cloudflare, and AI

DevFeed: [Building My Dream Developer Blog with Astro, Cloudflare, and AI](<https://devfeed.tech/articles/building-my-dream-developer-blog-with-astro-cloudflare-and-ai-25704.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/building-my-dream-developer-blog-with-astro-cloudflare-and-ai/>)

Author: Shreyas Patil

Published: 2026-04-20T00:00:00Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Astro](<https://devfeed.tech/topics/astro.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [antigravity](<https://devfeed.tech/tags/antigravity.md>), [astro](<https://devfeed.tech/tags/astro.md>), [blogging](<https://devfeed.tech/tags/blogging.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [developer](<https://devfeed.tech/tags/developer.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [git](<https://devfeed.tech/tags/git.md>), [google](<https://devfeed.tech/tags/google.md>), [markdown](<https://devfeed.tech/tags/markdown.md>)

### AI overview

The author describes migrating more than 60 technical blogs from Hashnode to a custom Astro site hosted on Cloudflare Pages. The site uses Markdown files in Git, and the author used Google Antigravity as a pair-programming AI agent while building it.

### Source excerpt

How I migrated my 60+ engineering blogs from Hashnode to a custom Astro setup on Cloudflare with the help of Google Antigravity AI.

## The Future of Android Apps with AppFunctions

DevFeed: [The Future of Android Apps with AppFunctions](<https://devfeed.tech/articles/the-future-of-android-apps-with-appfunctions-25755.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions/>)

Author: Shreyas Patil

Published: 2026-03-30T04:30:00Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>)

Tags: [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [aidl](<https://devfeed.tech/tags/aidl.md>), [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

This article explains Android AppFunctions, which let apps expose self-describing data and functionality that AI agents and assistants can discover and execute using natural language. It discusses their optional nature, current device availability, Gemini access, and integration through the Android 16 SDK or Jetpack library.

### Source excerpt

Explore the potential of Android AppFunctions for AI agents. Learn how apps can share functionality with intelligent assistants using self-describing functions.

## session-bridge: I Made Two Claude Code Sessions Talk to Each Other

DevFeed: [session-bridge: I Made Two Claude Code Sessions Talk to Each Other](<https://devfeed.tech/articles/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other-25747.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other/>)

Author: Shreyas Patil

Published: 2026-03-20T13:09:22Z

Content type: opinion

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [agentic-ai-development](<https://devfeed.tech/tags/agentic-ai-development.md>), [building](<https://devfeed.tech/tags/building.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [claude-plugin](<https://devfeed.tech/tags/claude-plugin.md>), [claudeai](<https://devfeed.tech/tags/claudeai.md>), [context](<https://devfeed.tech/tags/context.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>)

### AI overview

A developer describes building session-bridge, a Claude Code plugin that lets separate sessions for a library and its consumer application communicate and share context across repositories. The article covers the motivation, architecture, design decisions, failures, and shipped result.

### Source excerpt

Building 'session-bridge': A Claude Code plugin that allows separate AI sessions to communicate and share context across different repositories.

## Exploring CompositionLocal API internals in Jetpack Compose

DevFeed: [Exploring CompositionLocal API internals in Jetpack Compose](<https://devfeed.tech/articles/exploring-compositionlocal-api-internals-in-jetpack-compose-25717.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2026-03-09T05:19:42Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [API](<https://devfeed.tech/topics/api.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [data](<https://devfeed.tech/tags/data.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [internals](<https://devfeed.tech/tags/internals.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [source](<https://devfeed.tech/tags/source.md>)

### AI overview

A deep dive into Jetpack Compose's CompositionLocal API, explaining how values flow implicitly through the composition tree and how the system is implemented with class hierarchies, value holders, persistent maps, and Composer integration.

### Source excerpt

Deep dive into the internals of Jetpack Compose's CompositionLocal API. Trace how data flows implicitly through the composition tree under the hood.

## Using AI Agents to Delegate Parallel Software Development Tasks

DevFeed: [Using AI Agents to Delegate Parallel Software Development Tasks](<https://devfeed.tech/articles/you-can-t-multitask-your-ai-agent-can-25759.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/you-can-t-multitask-your-ai-agent-can/>)

Author: Shreyas Patil

Published: 2026-03-02T04:00:00Z

Content type: opinion

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-tools](<https://devfeed.tech/tags/ai-tools.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [codex](<https://devfeed.tech/tags/codex.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [git](<https://devfeed.tech/tags/git.md>), [multitasking](<https://devfeed.tech/tags/multitasking.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [vibe-coding](<https://devfeed.tech/tags/vibe-coding.md>)

### AI overview

This opinion article argues that developers can use AI agents to handle separate software development tasks in parallel, reducing the context switching caused by human multitasking. It frames agents as a way to delegate work such as feature development, crash fixes, and pull request reviews.

### Source excerpt

Boost your productivity with AI agents. Learn how to delegate complex tasks to AI tools like Claude Code and Gemini to overcome human multitasking limitations.

## DroidCon: Debugging App Performance at Scale

DevFeed: [DroidCon: Debugging App Performance at Scale](<https://devfeed.tech/articles/droidcon-debugging-app-performance-at-scale-25715.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/droidcon-debugging-app-performance-at-scale/>)

Author: Shreyas Patil

Published: 2026-01-19T04:58:14Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [app-performance](<https://devfeed.tech/tags/app-performance.md>), [community](<https://devfeed.tech/tags/community.md>), [conference](<https://devfeed.tech/tags/conference.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [droidconindia](<https://devfeed.tech/tags/droidconindia.md>), [performance](<https://devfeed.tech/tags/performance.md>), [profiling](<https://devfeed.tech/tags/profiling.md>), [public-speaking](<https://devfeed.tech/tags/public-speaking.md>), [recap](<https://devfeed.tech/tags/recap.md>), [talk](<https://devfeed.tech/tags/talk.md>), [tech-talk](<https://devfeed.tech/tags/tech-talk.md>)

### AI overview

A recap of the author's DroidCon India 2025 session on debugging Android app performance at scale. The article links to the session recording and slides and discusses the event, audience response, and developer community.

### Source excerpt

Recap of my DroidCon India 2025 talk on debugging Android app performance at scale. Watch the session and learn about performance profiling tools.

## A Simple key to a Better LazyList in Jetpack Compose

DevFeed: [A Simple key to a Better LazyList in Jetpack Compose](<https://devfeed.tech/articles/a-simple-key-to-a-better-lazylist-in-jetpack-compose-25698.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2025-10-08T12:00:28Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [learn](<https://devfeed.tech/tags/learn.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A tutorial on using stable, unique keys with Jetpack Compose LazyColumn and LazyRow. It explains that keys help Compose track items when lists change, reducing unnecessary recompositions and improving list performance, while duplicate keys can cause crashes.

### Source excerpt

Learn how to optimize Jetpack Compose LazyList performance using keys. Understand how keys help reduce recompositions and improve scrolling efficiency.

## Exploring PausableComposition internals in Jetpack Compose

DevFeed: [Exploring PausableComposition internals in Jetpack Compose](<https://devfeed.tech/articles/exploring-pausablecomposition-internals-in-jetpack-compose-25718.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2025-07-14T05:34:31Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [internals](<https://devfeed.tech/tags/internals.md>), [jank](<https://devfeed.tech/tags/jank.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-optimization](<https://devfeed.tech/tags/performance-optimization.md>), [ui](<https://devfeed.tech/tags/ui.md>), [uiux](<https://devfeed.tech/tags/uiux.md>)

### AI overview

This article explores the internals of PausableComposition, an internal API introduced in Compose 1.9.X. It explains how composition can be divided into smaller pieces and prepared asynchronously to reduce main-thread work and help prevent dropped frames during scrolling.

### Source excerpt

Explore the internals of PausableComposition in Jetpack Compose. Learn how Compose manages state and effects when a composition is paused or resumed.

## Deep dive into annotations in Jetpack Compose

DevFeed: [Deep dive into annotations in Jetpack Compose](<https://devfeed.tech/articles/deep-dive-into-annotations-in-jetpack-compose-25711.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2025-05-19T05:16:29Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [deep](<https://devfeed.tech/tags/deep.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [examples](<https://devfeed.tech/tags/examples.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recomposition](<https://devfeed.tech/tags/recomposition.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how Jetpack Compose uses compiler annotations and runtime mechanisms such as recomposition, skipping, and restartability. It describes how these mechanisms affect composable execution and performance, with practical examples.

### Source excerpt

An extensive deep dive into annotations in Jetpack Compose. Understand how @Composable, @Stable, @ReadOnlyComposable, and others work under the hood.

## Understanding Dispatchers: Main and Main.immediate

DevFeed: [Understanding Dispatchers: Main and Main.immediate](<https://devfeed.tech/articles/understanding-dispatchers-main-and-main-immediate-25756.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate/>)

Author: Shreyas Patil

Published: 2025-04-02T12:22:06Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [kotlin-coroutines](<https://devfeed.tech/topics/kotlin-coroutines.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [coroutines-flow](<https://devfeed.tech/tags/coroutines-flow.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-beginner](<https://devfeed.tech/tags/kotlin-beginner.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [multithreading](<https://devfeed.tech/tags/multithreading.md>), [reactive-programming](<https://devfeed.tech/tags/reactive-programming.md>), [threadpools](<https://devfeed.tech/tags/threadpools.md>), [threads](<https://devfeed.tech/tags/threads.md>)

### AI overview

A deep dive into Kotlin coroutine dispatchers on Android, explaining the difference between Dispatchers.Main and Dispatchers.Main.immediate. It describes how HandlerContext dispatches work and when execution is posted to the main thread or performed synchronously on the current thread.

### Source excerpt

A deep dive into Kotlin Coroutine Dispatchers. Understand the subtle but important difference between Dispatchers.Main and Dispatchers.Main.immediate in Android.

## #51 - My developer blogging journey so far

DevFeed: [#51 - My developer blogging journey so far](<https://devfeed.tech/articles/51-my-developer-blogging-journey-so-far-25697.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far/>)

Author: Shreyas Patil

Published: 2025-02-18T14:10:44Z

Content type: opinion

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Learning](<https://devfeed.tech/topics/learning.md>), [Android](<https://devfeed.tech/topics/android.md>), [Firebase UI](<https://devfeed.tech/topics/firebase-ui.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Realtime Database](<https://devfeed.tech/topics/realtime-database.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blogging](<https://devfeed.tech/tags/blogging.md>), [code](<https://devfeed.tech/tags/code.md>), [community](<https://devfeed.tech/tags/community.md>), [content-creation](<https://devfeed.tech/tags/content-creation.md>), [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [firebase-database](<https://devfeed.tech/tags/firebase-database.md>), [firebase-ui](<https://devfeed.tech/tags/firebase-ui.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [github](<https://devfeed.tech/tags/github.md>), [journey](<https://devfeed.tech/tags/journey.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [technical-documentation](<https://devfeed.tech/tags/technical-documentation.md>), [technical-writing-1](<https://devfeed.tech/tags/technical-writing-1.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

A personal account of the author's blogging journey, beginning with an Android project in 2019 and a contribution to FirebaseUI-Android that led to a first published technical article. The author describes how writing supported learning, career development, and sharing with the developer community.

### Source excerpt

A 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.

## Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose

DevFeed: [Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose](<https://devfeed.tech/articles/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose-25703.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2024-11-19T14:19:27Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [compose-compiler](<https://devfeed.tech/tags/compose-compiler.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [jetpack-compose-ui-components](<https://devfeed.tech/tags/jetpack-compose-ui-components.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recompose](<https://devfeed.tech/tags/recompose.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

This article compares direct state propagation with lambda-based state propagation in Jetpack Compose using a prototype stock-market screen with frequent UI updates. It describes a macrobenchmark setup intended to analyze their performance and recomposition behavior, but the supplied text does not include the benchmark results or conclusions.

### Source excerpt

Performance benchmarks of direct state propagation vs. lambda-based state in Jetpack Compose. Learn which approach minimizes recompositions for better UI performance.

## Skipping the invocation of intermediate composables

DevFeed: [Skipping the invocation of intermediate composables](<https://devfeed.tech/articles/skipping-the-invocation-of-intermediate-composables-25749.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables/>)

Author: Shreyas Patil

Published: 2024-11-11T13:33:20Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [Android](<https://devfeed.tech/topics/android.md>), [android-app-development](<https://devfeed.tech/topics/android-app-development.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-compiler](<https://devfeed.tech/tags/compose-compiler.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [performance](<https://devfeed.tech/tags/performance.md>), [reactjs](<https://devfeed.tech/tags/reactjs.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

This tutorial explains how Jetpack Compose can skip intermediate composables during recomposition. It discusses deferring state reads, using lambdas, and structuring screens with stateful and stateless composables to reduce unnecessary UI work.

### Source excerpt

Learn how Jetpack Compose optimizes UI rendering by skipping intermediate composables. Understand how to design your UI for maximum performance.

## Kotlin Exception Handling: Why Singleton Exceptions are a bad idea

DevFeed: [Kotlin Exception Handling: Why Singleton Exceptions are a bad idea](<https://devfeed.tech/articles/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea-25732.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea/>)

Author: Shreyas Patil

Published: 2024-09-18T12:56:49Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Exception](<https://devfeed.tech/topics/exception.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [App](<https://devfeed.tech/topics/app.md>), [Crashlytics](<https://devfeed.tech/topics/crashlytics.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [coding](<https://devfeed.tech/tags/coding.md>), [crashlytics](<https://devfeed.tech/tags/crashlytics.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [errors](<https://devfeed.tech/tags/errors.md>), [exception-handling](<https://devfeed.tech/tags/exception-handling.md>), [exceptionhandling](<https://devfeed.tech/tags/exceptionhandling.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [java](<https://devfeed.tech/tags/java.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-beginner](<https://devfeed.tech/tags/kotlin-beginner.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mistakes](<https://devfeed.tech/tags/mistakes.md>), [programming-blogs](<https://devfeed.tech/tags/programming-blogs.md>), [programming-tips](<https://devfeed.tech/tags/programming-tips.md>)

### AI overview

This Kotlin micro-blog explains why singleton exception instances can produce incorrect stack traces and mislead debugging. It recommends avoiding singleton exceptions when stack traces matter, while noting they may be acceptable for internal state or informational exceptions that are not monitored at scale.

### Source excerpt

Understand why using singleton exceptions in Kotlin can be a bad practice and how it affects stack traces and debugging in your applications.

## Analyzing Jetpack Compose compiler reports with a Gradle plugin

DevFeed: [Analyzing Jetpack Compose compiler reports with a Gradle plugin](<https://devfeed.tech/articles/effortless-compose-compiler-report-analysis-25716.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis/>)

Author: Shreyas Patil

Published: 2024-05-20T12:30:51Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [guide](<https://devfeed.tech/tags/guide.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [opensource](<https://devfeed.tech/tags/opensource.md>), [performance](<https://devfeed.tech/tags/performance.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how Jetpack Compose compiler reports expose composable-function stability, restartability, and skippability. It presents a Gradle plugin that parses the reports and metrics and converts them into an HTML report highlighting potentially problematic and non-problematic composables and classes.

### Source excerpt

A guide to analyzing Jetpack Compose compiler reports easily. Learn how to diagnose stability and skippability of your composables for better performance.

## Capturing composable to a bitmap without losing a state

DevFeed: [Capturing composable to a bitmap without losing a state](<https://devfeed.tech/articles/capturing-composable-to-a-bitmap-without-losing-a-state-25705.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state/>)

Author: Shreyas Patil

Published: 2024-03-20T13:58:20Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [caching](<https://devfeed.tech/tags/caching.md>), [capture](<https://devfeed.tech/tags/capture.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [jetpack-compose-layouts-and-modifiers](<https://devfeed.tech/tags/jetpack-compose-layouts-and-modifiers.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mobile-apps](<https://devfeed.tech/tags/mobile-apps.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [screenshot](<https://devfeed.tech/tags/screenshot.md>), [screenshots](<https://devfeed.tech/tags/screenshots.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how to capture Jetpack Compose content as a Bitmap while preserving its current state. It describes the Compose 1.6.x rendering approach, shows how stateful content such as counters and network images can expose problems, and examines caching and canvas rendering behavior.

### Source excerpt

Learn 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.

## Rich media input from the keyboard in Compose

DevFeed: [Rich media input from the keyboard in Compose](<https://devfeed.tech/articles/rich-media-input-from-the-keyboard-in-compose-25744.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose/>)

Author: Shreyas Patil

Published: 2024-03-01T12:49:32Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [GUI](<https://devfeed.tech/topics/gui.md>), [App](<https://devfeed.tech/topics/app.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [api](<https://devfeed.tech/tags/api.md>), [app](<https://devfeed.tech/tags/app.md>), [applications](<https://devfeed.tech/tags/applications.md>), [building](<https://devfeed.tech/tags/building.md>), [chat](<https://devfeed.tech/tags/chat.md>), [code](<https://devfeed.tech/tags/code.md>), [components](<https://devfeed.tech/tags/components.md>), [compose](<https://devfeed.tech/tags/compose.md>), [content](<https://devfeed.tech/tags/content.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [explore](<https://devfeed.tech/tags/explore.md>), [feature](<https://devfeed.tech/tags/feature.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [image](<https://devfeed.tech/tags/image.md>), [images](<https://devfeed.tech/tags/images.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [keyboard](<https://devfeed.tech/tags/keyboard.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [learn](<https://devfeed.tech/tags/learn.md>), [media](<https://devfeed.tech/tags/media.md>), [mobile-apps](<https://devfeed.tech/tags/mobile-apps.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [programming-blogs](<https://devfeed.tech/tags/programming-blogs.md>), [ui](<https://devfeed.tech/tags/ui.md>), [uiux](<https://devfeed.tech/tags/uiux.md>)

### AI overview

A tutorial on handling rich media input such as GIFs and images from the keyboard in Jetpack Compose chat applications. It explains that Jetpack Compose 1.7.x introduced an API and modifier for receiving specified content types through keyboard input, with related support for drag-and-drop and clipboard content.

### Source excerpt

Learn how to handle rich media input (like GIFs and images) from the keyboard in Jetpack Compose, essential for modern chat applications.

## Collecting items from the Flow in chunks💦

DevFeed: [Collecting items from the Flow in chunks💦](<https://devfeed.tech/articles/collecting-items-from-the-flow-in-chunks-25706.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks/>)

Author: Shreyas Patil

Published: 2023-10-23T04:46:23Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [kotlin-flow](<https://devfeed.tech/topics/kotlin-flow.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/topics/kotlin-coroutines.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [reactive](<https://devfeed.tech/topics/reactive.md>), [SQLite](<https://devfeed.tech/topics/sqlite.md>)

Tags: [collect](<https://devfeed.tech/tags/collect.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [flow](<https://devfeed.tech/tags/flow.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [kotlin-flow](<https://devfeed.tech/tags/kotlin-flow.md>), [multithreading](<https://devfeed.tech/tags/multithreading.md>), [reactive-programming](<https://devfeed.tech/tags/reactive-programming.md>)

### AI overview

A practical guide to collecting Kotlin Flow items in time-based chunks without losing produced data. It explains why batching high-frequency analytics events can reduce the cost of repeated database or network operations and outlines an operator implementation.

### Source excerpt

Learn how to collect Kotlin Flow items in chunks or intervals without losing data. A practical guide to handling high-frequency data streams efficiently.

## How Indirect Field Initialization Can Bypass Kotlin's Non-Nullability Checks

DevFeed: [How Indirect Field Initialization Can Bypass Kotlin's Non-Nullability Checks](<https://devfeed.tech/articles/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization-25745.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization/>)

Author: Shreyas Patil

Published: 2023-09-20T04:33:24Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Exception](<https://devfeed.tech/topics/exception.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code](<https://devfeed.tech/tags/code.md>), [exception](<https://devfeed.tech/tags/exception.md>), [java](<https://devfeed.tech/tags/java.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-nullsafety](<https://devfeed.tech/tags/kotlin-nullsafety.md>)

### AI overview

This Kotlin article explains how indirect dependencies between field initializers can cause a runtime NullPointerException on the JVM, even when fields are declared non-nullable. Direct initialization may instead produce a compile-time error, so declaration order and initialization dependencies should be checked.

### Source excerpt

A cautionary tale about Kotlin's non-nullability. Discover how incorrect field initialization can lead to unexpected NullPointerExceptions at runtime.

## Solving the mystery of recompositions in Compose's LazyList

DevFeed: [Solving the mystery of recompositions in Compose's LazyList](<https://devfeed.tech/articles/solving-the-mystery-of-recompositions-in-compose-s-lazylist-25751.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/solving-the-mystery-of-recompositions-in-composes-lazylist/>)

Author: Shreyas Patil

Published: 2023-08-21T13:03:59Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apis](<https://devfeed.tech/tags/apis.md>), [components](<https://devfeed.tech/tags/components.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [performance](<https://devfeed.tech/tags/performance.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial investigates unnecessary recompositions in Jetpack Compose LazyColumn and LazyRow lists. It demonstrates that adding a new item can recompose existing items, then presents an implementation change that keeps the Modifier internal and exposes click behavior through a lambda.

### Source excerpt

Debugging recompositions in Jetpack Compose LazyLists. Learn why your list items might be recomposing unnecessarily and how to fix it.

## Sleepless Concurrency: delay() vs. Thread.sleep()

DevFeed: [Sleepless Concurrency: delay() vs. Thread.sleep()](<https://devfeed.tech/articles/sleepless-concurrency-delay-vs-thread-sleep-25750.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/sleepless-concurrency-delay-vs-threadsleep/>)

Author: Shreyas Patil

Published: 2023-07-31T04:39:30Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [kotlin-coroutines](<https://devfeed.tech/topics/kotlin-coroutines.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [blocking](<https://devfeed.tech/tags/blocking.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [multithreading](<https://devfeed.tech/tags/multithreading.md>), [threading](<https://devfeed.tech/tags/threading.md>)

### AI overview

This tutorial explains how Kotlin coroutines implement delay() on the JVM and contrasts its non-blocking behavior with Java's blocking Thread.sleep(). A single-thread example shows that delay() allows concurrent coroutines to progress, while Thread.sleep() makes the second coroutine wait and roughly doubles total execution time.

### Source excerpt

Explore the difference between delay() and Thread.sleep() in Kotlin. Understand how non-blocking concurrency works from a platform perspective.

## PermissionFlow: A Reactive API for knowing the status of Android app permissions

DevFeed: [PermissionFlow: A Reactive API for knowing the status of Android app permissions](<https://devfeed.tech/articles/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions-25740.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions/>)

Author: Shreyas Patil

Published: 2023-05-22T05:19:08Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [reactive](<https://devfeed.tech/topics/reactive.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [kotlin-flow](<https://devfeed.tech/topics/kotlin-flow.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-flow](<https://devfeed.tech/tags/kotlin-flow.md>), [permission](<https://devfeed.tech/tags/permission.md>), [reactive](<https://devfeed.tech/tags/reactive.md>)

### AI overview

PermissionFlow is an open-source Android library that provides a reactive API for tracking permission states across app modules. The article explains how it can notify subscribers of permission changes, including changes made in app settings, and describes Kotlin Flow, testing, and Jetpack Compose support.

### Source excerpt

Introduction to PermissionFlow: A reactive API for Android that simplifies tracking permission status changes using Kotlin Coroutines and Flow.

[Next page](<https://devfeed.tech/sources/shreyas-patil-s-blog.md?cursor=WyIyMDIzLTA1LTIyVDA1OjE5OjA4KzAwOjAwIiwgIjZiNzE5YjM3LTBjNDMtNDY0YS1iYTcwLTY4YjFlMTJiMjA3ZSJd>)