56,966 blogs · [ { "id": "01a08753-d9d7-7061-8f93-8ba7c0ba17c9", "title": "Stop Ignoring Compose Stability (Yes, Even with Strong Skipping Mode)", "url": "https://blog.shreyaspatil.dev/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode/", "published_at": "2026-08-03T04:30:00+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c110a70f", "title": "Inside SubcomposeLayout: Jetpack Compose’s Most Misunderstood API", "url": "https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api/", "published_at": "2026-07-10T12:05:00+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c1ef7aa6", "title": "Building My Dream Developer Blog with Astro, Cloudflare, and AI", "url": "https://blog.shreyaspatil.dev/building-my-dream-developer-blog-with-astro-cloudflare-and-ai/", "published_at": "2026-04-20T00:00:00+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c2823886", "title": "The Future of Android Apps with AppFunctions", "url": "https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions/", "published_at": "2026-03-30T04:30:00+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c37f9fef", "title": "session-bridge: I Made Two Claude Code Sessions Talk to Each Other", "url": "https://blog.shreyaspatil.dev/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other/", "published_at": "2026-03-20T13:09:22+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c3a91436", "title": "Exploring CompositionLocal API internals in Jetpack Compose", "url": "https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose/", "published_at": "2026-03-09T05:19:42+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c46f284a", "title": "You Can't Multitask. Your AI Agent Can.", "url": "https://blog.shreyaspatil.dev/you-can-t-multitask-your-ai-agent-can/", "published_at": "2026-03-02T04:00:00+00:00" }, { "id": "01a08753-d9d7-7061-8f93-8ba7c51bb4aa", "title": "DroidCon: Debugging App Performance at Scale", "url": "https://blog.shreyaspatil.dev/droidcon-debugging-app-performance-at-scale/", "published_at": "2026-01-19T04:58:14+00:00" }, { "id": "01a08753-d9d8-7285-b680-151971330ad7", "title": "A Simple key to a Better LazyList in Jetpack Compose", "url": "https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose/", "published_at": "2025-10-08T12:00:28+00:00" }, { "id": "01a08753-d9d8-7285-b680-151971d07d4b", "title": "Exploring PausableComposition internals in Jetpack Compose", "url": "https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose/", "published_at": "2025-07-14T05:34:31+00:00" }, { "id": "01a08753-d9d8-7285-b680-151972b81968", "title": "Deep dive into annotations in Jetpack Compose", "url": "https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose/", "published_at": "2025-05-19T05:16:29+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519733e6ec9", "title": "Understanding Dispatchers: Main and Main.immediate", "url": "https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate/", "published_at": "2025-04-02T12:22:06+00:00" }, { "id": "01a08753-d9d8-7285-b680-151973657ad0", "title": "#51 - My developer blogging journey so far", "url": "https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far/", "published_at": "2025-02-18T14:10:44+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519738d407d", "title": "Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose", "url": "https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose/", "published_at": "2024-11-19T14:19:27+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197435fd40", "title": "Skipping the invocation of intermediate composables", "url": "https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables/", "published_at": "2024-11-11T13:33:20+00:00" }, { "id": "01a08753-d9d8-7285-b680-151974a8baa2", "title": "Kotlin Exception Handling: Why Singleton Exceptions are a bad idea", "url": "https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea/", "published_at": "2024-09-18T12:56:49+00:00" }, { "id": "01a08753-d9d8-7285-b680-151974fdca3b", "title": "Effortless Compose Compiler report analysis", "url": "https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis/", "published_at": "2024-05-20T12:30:51+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197595d2a1", "title": "Capturing composable to a bitmap without losing a state", "url": "https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state/", "published_at": "2024-03-20T13:58:20+00:00" }, { "id": "01a08753-d9d8-7285-b680-151975d4357c", "title": "Rich media input from the keyboard in Compose", "url": "https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose/", "published_at": "2024-03-01T12:49:32+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519765ede29", "title": "Collecting items from the Flow in chunks💦", "url": "https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks/", "published_at": "2023-10-23T04:46:23+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519769fc4ec", "title": "Runtime Surprise: Kotlin Breaks Non-Nullability Promise on Developer Cheating in Field Initialization", "url": "https://blog.shreyaspatil.dev/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization/", "published_at": "2023-09-20T04:33:24+00:00" }, { "id": "01a08753-d9d8-7285-b680-151976c854c3", "title": "Solving the mystery of recompositions in Compose's LazyList", "url": "https://blog.shreyaspatil.dev/solving-the-mystery-of-recompositions-in-composes-lazylist/", "published_at": "2023-08-21T13:03:59+00:00" }, { "id": "01a08753-d9d8-7285-b680-151977238caf", "title": "Sleepless Concurrency: delay() vs. Thread.sleep()", "url": "https://blog.shreyaspatil.dev/sleepless-concurrency-delay-vs-threadsleep/", "published_at": "2023-07-31T04:39:30+00:00" }, { "id": "01a08753-d9d8-7285-b680-151977efa899", "title": "PermissionFlow: A Reactive API for knowing the status of Android app permissions", "url": "https://blog.shreyaspatil.dev/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions/", "published_at": "2023-05-22T05:19:08+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519781a82b6", "title": "Simplifying Redux in Kotlin: \"mutating\" immutable states with Mutekt", "url": "https://blog.shreyaspatil.dev/simplifying-redux-in-kotlin-mutating-immutable-states-with-mutekt/", "published_at": "2023-03-24T13:00:39+00:00" }, { "id": "01a08753-d9d8-7285-b680-151978e3bbca", "title": "Mastering Android App Performance: Analyzing Bottlenecks with Perfetto 🚦", "url": "https://blog.shreyaspatil.dev/mastering-android-app-performance-analyzing-bottlenecks-with-perfetto/", "published_at": "2023-03-13T13:00:39+00:00" }, { "id": "01a08753-d9d8-7285-b680-151978e85d5b", "title": "Leveraging the Snapshot Mutation Policies of Jetpack Compose", "url": "https://blog.shreyaspatil.dev/leveraging-the-snapshot-mutation-policies-of-jetpack-compose/", "published_at": "2023-01-30T13:30:39+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519792febda", "title": "ViewModel: for UI business, not UI operations 😮", "url": "https://blog.shreyaspatil.dev/viewmodel-for-ui-business-not-ui-operations/", "published_at": "2022-12-19T12:30:42+00:00" }, { "id": "01a08753-d9d8-7285-b680-151979b6fa79", "title": "Exploring \"select\" expression of Kotlin coroutines", "url": "https://blog.shreyaspatil.dev/exploring-select-expression-of-kotlin-coroutines/", "published_at": "2022-09-27T14:29:44+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197a0c6977", "title": "Combining StateFlows and transforming it into a StateFlow", "url": "https://blog.shreyaspatil.dev/combining-stateflows-and-transforming-it-into-a-stateflow/", "published_at": "2022-06-24T12:30:00+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197a448aea", "title": "Leveraging the Semaphore concept in Coroutines to limit the parallelism 🔀", "url": "https://blog.shreyaspatil.dev/leveraging-the-semaphore-concept-in-coroutines-to-limit-the-parallelism/", "published_at": "2022-04-01T12:57:35+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197b1df318", "title": "Promise compose compiler and imply when you'll change 🤞", "url": "https://blog.shreyaspatil.dev/promise-compose-compiler-and-imply-when-youll-change/", "published_at": "2022-03-10T12:42:38+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197b97e085", "title": "Automate library publishing to Maven Central with GitHub Actions Workflow Dispatch 🤖", "url": "https://blog.shreyaspatil.dev/automate-library-publishing-to-maven-central-with-github-actions-workflow-dispatch/", "published_at": "2022-01-21T12:49:26+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197be3b394", "title": "Filtering and modifying text input in Jetpack Compose way", "url": "https://blog.shreyaspatil.dev/filtering-and-modifying-text-input-in-jetpack-compose-way/", "published_at": "2021-12-20T12:15:05+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197c6f9c5f", "title": "Navigating Screens in Jetpack Compose (DevFest India 2021 - Mobile Track)", "url": "https://blog.shreyaspatil.dev/navigating-screens-in-jetpack-compose-devfest-india-2021-mobile-track/", "published_at": "2021-10-26T16:03:04+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197cd8f3a6", "title": "🙅‍♂️ Don't let ViewModel know about framework level dependencies", "url": "https://blog.shreyaspatil.dev/dont-let-viewmodel-knew-about-framework-level-dependencies/", "published_at": "2021-09-17T12:18:27+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197cdf6395", "title": "Observing Live connectivity status in Jetpack Compose way!", "url": "https://blog.shreyaspatil.dev/observing-live-connectivity-status-in-jetpack-compose-way/", "published_at": "2021-08-17T13:22:10+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197d1bc36a", "title": "Composing composable in the Text line with InlineTextContent in Jetpack Compose", "url": "https://blog.shreyaspatil.dev/composing-composable-in-the-text-line-with-inlinetextcontent-in-jetpack-compose/", "published_at": "2021-07-30T14:08:38+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197de7dc73", "title": "Providing AssistedInject supported ViewModel for Composable using Hilt", "url": "https://blog.shreyaspatil.dev/providing-assistedinject-supported-viewmodel-for-composable-using-hilt/", "published_at": "2021-06-29T14:52:48+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197e852590", "title": "Don't let Kotlin's single-expression function ruin your business😲", "url": "https://blog.shreyaspatil.dev/dont-let-kotlins-single-expression-function-ruin-your-business/", "published_at": "2021-05-24T14:42:29+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197f2227c5", "title": "Hide internal members of Kotlin Module from JVM 🔐", "url": "https://blog.shreyaspatil.dev/hide-internal-members-of-kotlin-module-from-jvm/", "published_at": "2021-05-17T04:23:42+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197f54b5eb", "title": "Let your delegates auto-nullify references☠️", "url": "https://blog.shreyaspatil.dev/let-your-delegates-auto-nullify-references/", "published_at": "2021-03-12T13:39:24+00:00" }, { "id": "01a08753-d9d8-7285-b680-15197fa2f6fd", "title": "👨‍🍳 Cooking Tasty code in Kotlin 🍴 — Part 2", "url": "https://blog.shreyaspatil.dev/cooking-tasty-code-in-kotlin-part-2/", "published_at": "2021-01-01T09:23:42+00:00" }, { "id": "01a08753-d9d8-7285-b680-151980308035", "title": "👨‍🍳 Cooking Tasty code in Kotlin 🍴 — Part 1", "url": "https://blog.shreyaspatil.dev/cooking-tasty-code-in-kotlin-part-1/", "published_at": "2020-12-24T14:37:40+00:00" }, { "id": "01a08753-d9d8-7285-b680-151980ef9699", "title": "🔥 Quickly distribute your app with Firebase App Distribution using GitHub Actions + Fastlane 🚀", "url": "https://blog.shreyaspatil.dev/quickly-distribute-your-app-with-firebase-app-distribution-using-github-actions-fastlane/", "published_at": "2020-10-21T05:33:17+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519814b11b6", "title": "Automate publishing app to the Google Play Store with GitHub Actions⚡+ Fastlane🏃", "url": "https://blog.shreyaspatil.dev/automate-publishing-app-to-the-google-play-store-with-github-actions-fastlane-ac9104712486/", "published_at": "2020-10-09T12:33:39+00:00" }, { "id": "01a08753-d9d8-7285-b680-15198199aea7", "title": "DevOps-ify Android libraries with GitHub Actions and Package Registry🚀", "url": "https://blog.shreyaspatil.dev/devops-ify-android-libraries-with-github-actions-and-package-registry-5e7f69a83622/", "published_at": "2020-10-02T10:29:52+00:00" }, { "id": "01a08753-d9d8-7285-b680-151982828057", "title": "Hello DataStore, Bye SharedPreferences👋 — Android📱 — Part 2: Proto DataStore", "url": "https://blog.shreyaspatil.dev/hello-datastore-bye-sharedpreferences-android-part-2-proto-datastore-2716fbfd4783/", "published_at": "2020-09-12T13:56:18+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519833787f8", "title": "Hello DataStore, Bye SharedPreferences👋 — Android📱 — Part 1: Preference DataStore", "url": "https://blog.shreyaspatil.dev/hello-datastore-bye-sharedpreferences-android-f46c610b81d5/", "published_at": "2020-09-03T15:40:25+00:00" }, { "id": "01a08753-d9d8-7285-b680-151983bd5539", "title": "🕵️ Accessing device location using SIM Card 🗺️📍", "url": "https://blog.shreyaspatil.dev/accessing-device-location-using-sim-card-6cdb15645bef/", "published_at": "2020-07-28T15:07:45+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519841cb40d", "title": "Getting data from Google Sheets📊 → Flutter App📱 — Part 2", "url": "https://blog.shreyaspatil.dev/getting-data-from-google-sheets-flutter-app-part-2-d6e689fdbbed/", "published_at": "2020-07-04T08:33:27+00:00" }, { "id": "01a08753-d9d8-7285-b680-151984e7550e", "title": "🌊 StateFlow, End of LiveData?", "url": "https://blog.shreyaspatil.dev/stateflow-end-of-livedata-a473094229b3/", "published_at": "2020-05-22T15:49:15+00:00" }, { "id": "01a08753-d9d8-7285-b680-151985bee0f0", "title": "🤖 Automate Publishing Android Library to Bintray using GitHub Actions 🚀", "url": "https://blog.shreyaspatil.dev/automate-publishing-android-library-to-bintray-using-github-actions-9b8ad8ab2698/", "published_at": "2020-05-01T08:47:20+00:00" }, { "id": "01a08753-d9d8-7285-b680-151985d0992b", "title": "🔥Firebase-ing with Kotlin Coroutines + Flow 🌊", "url": "https://blog.shreyaspatil.dev/firebase-ing-with-kotlin-coroutines-flow-dab1bc364816/", "published_at": "2020-04-30T07:35:30+00:00" }, { "id": "01a08753-d9d8-7285-b680-151986c53a43", "title": "🔪 Introduction to Dagger DI 💉 by a Life way!", "url": "https://blog.shreyaspatil.dev/introduction-to-dagger-di-by-a-life-way-d34f62540329/", "published_at": "2020-03-15T07:54:11+00:00" }, { "id": "01a08753-d9d8-7285-b680-1519876e89c8", "title": "Update Queries without changing RecyclerView Adapter using FirebaseUI — Android 🔥", "url": "https://blog.shreyaspatil.dev/update-queries-without-changing-recyclerview-adapter-using-firebaseui-android-32098b3082b2/", "published_at": "2020-03-13T14:56:59+00:00" }, { "id": "01a08753-d9d8-7285-b680-151987dca4e2", "title": "Storing data from the Flutter app → Google Sheets 📊 — Part 1", "url": "https://blog.shreyaspatil.dev/storing-data-from-the-flutter-app-google-sheets-e4498e9cda5d/", "published_at": "2020-01-10T07:00:44+00:00" }, { "id": "01a08753-d9d8-7285-b680-15198890e845", "title": "⏰Scheduling FCM Push Notifications🔔 On Device — Android📱", "url": "https://blog.shreyaspatil.dev/scheduling-fcm-push-notifications-on-device-android-2d3bb9653b4d/", "published_at": "2019-12-19T02:44:55+00:00" }, { "id": "01a08753-d9d8-7285-b680-151988ae8151", "title": "Making Google-Apps Like NavigationView — Android 📱", "url": "https://blog.shreyaspatil.dev/making-google-apps-like-navigation-drawer-material-design-c8781d9ff8c8/", "published_at": "2019-09-10T17:26:01+00:00" }, { "id": "01a08753-d9d8-7285-b680-15198937580b", "title": "Firestore Pagination in Android — Using FirebaseUI Library 🔥", "url": "https://blog.shreyaspatil.dev/firestore-pagination-in-android-using-firebaseui-library-1d7fe1a75704/", "published_at": "2019-07-21T13:00:49+00:00" }, { "id": "01a08753-d9d8-7285-b680-15198a2a73b7", "title": "Animated Material Dialog — Android 📱 😍🎨", "url": "https://blog.shreyaspatil.dev/implementing-animated-material-dialog-in-android-c4fb35d7d050/", "published_at": "2019-06-13T08:15:23+00:00" }, { "id": "01a08753-d9d8-7285-b680-15198a32668d", "title": "💳UPI Payment Integration in Android with EasyUpiPayment library📱💸", "url": "https://blog.shreyaspatil.dev/implementing-upi-payment-integration-in-android-with-easyupipayment-library-aaf9bea715d9/", "published_at": "2019-06-07T04:33:51+00:00" }, { "id": "01a08753-d9d8-7285-b680-15198acdb1a1", "title": "Firebase Database Pagination — Android 🔥", "url": "https://blog.shreyaspatil.dev/firebase-database-paging-android-f59e6dd0dc75/", "published_at": "2019-04-08T13:53:22+00:00" } ] posts Claim your blog
Back to blog.shreyaspatil.dev
Blog · corpus.blog/blogs/blog.shreyaspatil.dev/posts

blog.shreyaspatil.dev

blog.shreyaspatil.dev

2026

2025

2024

2023

2022

2021

2020

2019