DEV Community

Android Expert profile picture

Android Expert

Android Engineer & Kotlin Advocate. 🚀 Deep dives into Jetpack Compose, Coroutines, and Clean Architecture. Turning complex code into scalable solutions. 🛠️✨

Location India Joined Joined on 
Race, Queue, or Cancel: Choosing the Right flatMap for Your Kotlin Flow

Race, Queue, or Cancel: Choosing the Right flatMap for Your Kotlin Flow

Comments
9 min read
Six Builders, One Mental Model: Choosing the Right Kotlin Coroutine Builder in a Production Android App

Six Builders, One Mental Model: Choosing the Right Kotlin Coroutine Builder in a Production Android App

Comments
13 min read
Why Your Compose Tests Started Failing: The v2 Test Dispatcher Explained

Why Your Compose Tests Started Failing: The v2 Test Dispatcher Explained

Comments
15 min read
Branching Without the Else: A Field Guide to Kotlin’s onTrue, onFalse and ifOrNull

Branching Without the Else: A Field Guide to Kotlin’s onTrue, onFalse and ifOrNull

Comments
7 min read
The Launcher That Outlives Your UI: Field Notes on rememberLauncherForActivityResult

The Launcher That Outlives Your UI: Field Notes on rememberLauncherForActivityResult

Comments
9 min read
Pixels Are Not Free: Right-Size, Share, and Release Bitmaps Before Android Does It for You

Pixels Are Not Free: Right-Size, Share, and Release Bitmaps Before Android Does It for You

Comments
11 min read
Quayside Benchmarks: Making Compose Faster Without Fooling Yourself

Quayside Benchmarks: Making Compose Faster Without Fooling Yourself

Comments
9 min read
Tracing Without Guesswork: Closing the Loop Between Your Laptop Profiler and a Stranger’s Pixel

Tracing Without Guesswork: Closing the Loop Between Your Laptop Profiler and a Stranger’s Pixel

Comments
10 min read
Past the Tap: Making Compose Screens Behave When the Mouse, Keyboard, and Stylus Show Up

Past the Tap: Making Compose Screens Behave When the Mouse, Keyboard, and Stylus Show Up

Comments
7 min read
The Process That Vanished: A Field Guide to Android Memory Failures Under Per-App Limits

The Process That Vanished: A Field Guide to Android Memory Failures Under Per-App Limits

Comments
14 min read
Scalpel, Not Sledgehammer: Precise Keep Rules for Smaller, Faster Android Apps

Scalpel, Not Sledgehammer: Precise Keep Rules for Smaller, Faster Android Apps

Comments
9 min read
Harbor Under Audit: Securing an Android App When an Agent Holds the Pen

Harbor Under Audit: Securing an Android App When an Agent Holds the Pen

Comments
13 min read
When the Window Lies: Compose Apps That Survive Resizing, Folding, and Docking

When the Window Lies: Compose Apps That Survive Resizing, Folding, and Docking

Comments
10 min read
Your Build File Is Not a Program: A Field Guide to Lightbuild for Android Teams

Your Build File Is Not a Program: A Field Guide to Lightbuild for Android Teams

Comments
9 min read
Links That Land Right: Type-Safe Deep Linking in Navigation 3, Failure Modes Included

Links That Land Right: Type-Safe Deep Linking in Navigation 3, Failure Modes Included

Comments
15 min read
Naming the Callback: Kotlin fun interface Without the Production Scars

Naming the Callback: Kotlin fun interface Without the Production Scars

Comments
9 min read
Your Compose Text Is Quietly Lying About Its Weight

Your Compose Text Is Quietly Lying About Its Weight

Comments
7 min read
One Turnstile or One Lane? Mutex vs. a Single-Thread Executor on Android

One Turnstile or One Lane? Mutex vs. a Single-Thread Executor on Android

Comments
9 min read
Same Thread, Different Moment: What Dispatchers.Main.immediate Really Changes

Same Thread, Different Moment: What Dispatchers.Main.immediate Really Changes

Comments
10 min read
Storage vs. Exposure: Backing Fields and Backing Properties in Kotlin

Storage vs. Exposure: Backing Fields and Backing Properties in Kotlin

Comments
7 min read
Guarding the Gate: Refusing Bad State Before It Lands with Kotlin’s Delegates.vetoable()

Guarding the Gate: Refusing Bad State Before It Lands with Kotlin’s Delegates.vetoable()

Comments
8 min read
Below the Waterline: Running Compose State Where There Is No Screen

Below the Waterline: Running Compose State Where There Is No Screen

Comments
13 min read
Telling ART What Matters Before the Crowd Does: Baseline Profiles vs. Cloud Profiles

Telling ART What Matters Before the Crowd Does: Baseline Profiles vs. Cloud Profiles

Comments
8 min read
Behind the Prompt: What Android Really Does When Your App Asks “Is This You?”

Behind the Prompt: What Android Really Does When Your App Asks “Is This You?”

Comments
7 min read
The Document Is the Product: Recording Compose UI for a Process You Don’t Own

The Document Is the Product: Recording Compose UI for a Process You Don’t Own

Comments
13 min read
Fan-Out With a Seatbelt: Six Ways flatMapMerge Bites Android Apps in Production

Fan-Out With a Seatbelt: Six Ways flatMapMerge Bites Android Apps in Production

Comments
8 min read
The Stack Trace That Blamed the Wrong Screen: Making Rethrown Coroutine Exceptions Traceable on Android

The Stack Trace That Blamed the Wrong Screen: Making Rethrown Coroutine Exceptions Traceable on Android

Comments
11 min read
The Last Frame Matters: Finishing Android Flows with transformWhile

The Last Frame Matters: Finishing Android Flows with transformWhile

Comments
10 min read
Pre-Cooking the First Launch: What Baseline Profiles Buy You, and What They Don’t

Pre-Cooking the First Launch: What Baseline Profiles Buy You, and What They Don’t

Comments
13 min read
Interrogate the Trace: Perfetto SQL for Android Performance Debugging

Interrogate the Trace: Perfetto SQL for Android Performance Debugging

Comments
16 min read
Why Method Tracing Lies: The Observer Effect in Android Profiling

Why Method Tracing Lies: The Observer Effect in Android Profiling

Comments
9 min read
Following a Dropped Frame Through Perfetto: An Android Developer’s Field Guide to System Traces

Following a Dropped Frame Through Perfetto: An Android Developer’s Field Guide to System Traces

Comments
16 min read
Where You Read Matters: Steering Compose Work with Deferred State Reads, derivedStateOf, and remember Keys

Where You Read Matters: Steering Compose Work with Deferred State Reads, derivedStateOf, and remember Keys

Comments
13 min read
Living on the Seam: Running Compose and Views Side by Side Without the Pain

Living on the Seam: Running Compose and Views Side by Side Without the Pain

Comments
19 min read
The Skip That Never Happens: Hunting Compose Stability Bugs in Production

The Skip That Never Happens: Hunting Compose Stability Bugs in Production

Comments
9 min read
Effects Are Not Free: A Field Guide to Compose Side Effects, Keys, and Stale Closures

Effects Are Not Free: A Field Guide to Compose Side Effects, Keys, and Stale Closures

Comments
11 min read
When the OS Pulls the Plug: Android State That Survives Process Death

When the OS Pulls the Plug: Android State That Survives Process Death

Comments
9 min read
Where Did My Screen Go? Reading the Android Back Stack Like a Map

Where Did My Screen Go? Reading the Android Back Stack Like a Map

Comments
11 min read
A Locked Drawer Beats a Closed One: Encrypting Auth Tokens Before They Reach DataStore

A Locked Drawer Beats a Closed One: Encrypting Auth Tokens Before They Reach DataStore

Comments
13 min read
Evidence Before the Alarm: Trigger-Based Profiling on Android with ProfilingManager

Evidence Before the Alarm: Trigger-Based Profiling on Android with ProfilingManager

Comments
10 min read
The 64-Slot Waiting Room: Why flatMapLatest Still Hands Your UI Yesterday's Data

The 64-Slot Waiting Room: Why flatMapLatest Still Hands Your UI Yesterday's Data

Comments
8 min read
Same Type, No Guarantees: Why Compose Distrusts Your List, Set and Map

Same Type, No Guarantees: Why Compose Distrusts Your List, Set and Map

Comments
7 min read
Who Gets to Run When the Screen Goes Dark? Android Services Under Modern Limits

Who Gets to Run When the Screen Goes Dark? Android Services Under Modern Limits

Comments
16 min read
A Chat Finder That Never Loses Its Place: Telegram-Style Search with Flow.scan

A Chat Finder That Never Loses Its Place: Telegram-Style Search with Flow.scan

Comments
11 min read
The Hidden Toll Booth: How Binder Decides Whether Your Android App Crashes, Stutters, or Freezes

The Hidden Toll Booth: How Binder Decides Whether Your Android App Crashes, Stutters, or Freezes

Comments
13 min read
One Snackbar, Three Streams: Choosing Between StateFlow, SharedFlow, and Channel

One Snackbar, Three Streams: Choosing Between StateFlow, SharedFlow, and Channel

Comments
12 min read
Cancelled by a Sibling: How Failure Travels Through the Coroutine Job Tree

Cancelled by a Sibling: How Failure Travels Through the Coroutine Job Tree

Comments
11 min read
Cancelled, but Still Running: How Cooperative Cancellation Quietly Drains Your Users’ Battery

Cancelled, but Still Running: How Cooperative Cancellation Quietly Drains Your Users’ Battery

Comments
12 min read
Two Questions, Five Lambdas: Kotlin Scope Functions Without the Guesswork

Two Questions, Five Lambdas: Kotlin Scope Functions Without the Guesswork

Comments
9 min read
Create Now, Create on First Touch, Create When I Say So: What val, by lazy, and lateinit Really Do

Create Now, Create on First Touch, Create When I Say So: What val, by lazy, and lateinit Really Do

Comments
9 min read
Your Keep Rules Are Costing You: Auditing R8 with the Configuration Analyzer

Your Keep Rules Are Costing You: Auditing R8 with the Configuration Analyzer

Comments
9 min read
Borrowing Real Hardware: A Field Guide to Android Device Streaming Without Burning Your Minutes

Borrowing Real Hardware: A Field Guide to Android Device Streaming Without Burning Your Minutes

Comments
10 min read
Passkeys at Scale on Android: An Error Taxonomy, an Eligibility Gate, and a Fallback You Can Trust

Passkeys at Scale on Android: An Error Taxonomy, an Eligibility Gate, and a Fallback You Can Trust

Comments
12 min read
Lean Pixels, Silent Logins: Getting an Android App Ready for Play’s 2027 Quality Bar

Lean Pixels, Silent Logins: Getting an Android App Ready for Play’s 2027 Quality Bar

Comments
11 min read
Beyond One User, One SKU: A Kotlin Field Guide to Google Play’s New Subscription Models

Beyond One User, One SKU: A Kotlin Field Guide to Google Play’s New Subscription Models

Comments
14 min read
Who Owns the Value? Choosing Between lateinit and by lazy in Production Kotlin

Who Owns the Value? Choosing Between lateinit and by lazy in Production Kotlin

Comments
8 min read
compileSdk Is What You Can Say, targetSdk Is What You Promise

compileSdk Is What You Can Say, targetSdk Is What You Promise

Comments
10 min read
Static, Finally: Moving Android Code from Companion Objects to Companion Blocks

Static, Finally: Moving Android Code from Companion Objects to Companion Blocks

Comments
8 min read
Let the Compiler Review Your UI: Choosing Between Enums, Sealed Classes, and Sealed Interfaces

Let the Compiler Review Your UI: Choosing Between Enums, Sealed Classes, and Sealed Interfaces

Comments
17 min read
Zero-Cost Types? The Fine Print on Kotlin Value Classes

Zero-Cost Types? The Fine Print on Kotlin Value Classes

Comments
10 min read
loading...