Performance Articles

Android Geofence End to End: Registration, Triggering, and Doze Failures

A full walkthrough of Android geofences from registration to triggering: PendingIntent callbacks, fused location, and how Doze power-saving causes trigger failures—with power optimization practices.

Adaptive Performance Scheduling with Android ADPF: From Thermal API to Performance Hints

How Android's Dynamic Performance Framework connects Thermal API, Performance Hints, and Game Mode to shed load before thermal throttling and flatten the frame-drop curve.

Android Analytics SDK End-to-End: From Event Collection Design to a Reliable Data Reporting Pipeline

A systematic walkthrough of an Android analytics SDK's full pipeline: event modeling, exposure collection and deduplication, mmap persistence over SQLite, batch compression with exponential-backoff reporting, and privacy compliance and production monitoring.

Kotlin Sequence vs. Iterable: Lazy Collection Performance

How Kotlin Sequences avoid intermediate allocations through lazy evaluation, the Iterator protocol and yield, with benchmark data and practical selection guidance.

Android Adaptive Refresh Rate, LTPO, and Choreographer: From preferredDisplayModeId to Hardware Shadow Scheduling

Why a 120Hz LTPO device holds video playback at 60Hz, how DisplayModeDirector arbitrates refresh rate votes, and how to adapt Choreographer timing when VSYNC changes.

Speeding Up Android WebView: Resource Interception and Offline Package Caching in Practice

A practical walkthrough of using shouldInterceptRequest to serve WebView resources from a local offline package, cutting first-paint time from 2.8s to 0.6s.

Android System Properties End-to-End: From init to Shared Memory and SELinux

How Android's system property mechanism works: property files, the init property service, zero-copy shared memory reads, SELinux enforcement, and cross-process change notifications.

Android Concurrency in Practice: Thread Pools, Queues, and Coroutine Dispatchers

A practical guide to Android thread pool tuning, queue selection, rejection policies, and how Kotlin coroutine dispatchers map onto underlying thread pools.

Inside the Compose Compiler Plugin: From @Composable to Synthetic Parameters

How the Compose Compiler Plugin transforms @Composable functions at the IR level, covering $changed bitmasks, skip logic generation, state read/write markers, and stability inference rules.

Inside MMKV: How mmap and Append-Only Protobuf Beat SharedPreferences

A practical walkthrough of MMKV's mmap memory mapping and append-only Protobuf writes, why SharedPreferences blocks the main thread, and how to choose between SP, MMKV, and DataStore.

Inside Android Matrix: A Production-Grade APM Framework Walkthrough

How Matrix intercepts main-thread stalls with Looper Printer sampling, catches hidden I/O via PLT Hook, and what to copy when building your own APM.

Android Studio Profiler in Practice: CPU Tracing to Memory Allocation Diagnostics

A practical guide to the full Android Studio Profiler toolkit, covering CPU sampling vs. instrumentation, flame graph reading, memory allocation tracking, heap dump diffing, and layered diagnosis with Systrace and Perfetto.

Building a Custom RecyclerView LayoutManager: Layout, Caching, Scroll, and Animation

An end-to-end guide to writing a custom RecyclerView LayoutManager: the Fill algorithm, three-tier cache, scroll state machine, dead-reckoning, and animation tradeoffs.

Inside Android Resource Loading: From resources.arsc Binary to Runtime Lookup

A walkthrough of Android's resource system from AAPT2 compilation to AssetManager2 runtime matching, covering the arsc binary structure, config scoring, and two-tier caching.

Inside Jetpack Compose List Animations: From animateItem to Declarative Choreography

A practical walkthrough of animateItem internals, key stability, recomposition scoping, and frame-rate tuning for LazyColumn.

Android On-Device AI Inference Warmup: From Model Loading to First-Token Latency

A practical breakdown of on-device AI cold-start latency: model loading, GPU Delegate initialization, KV cache prefill, warmup inference, long-lived contexts, and memory tradeoffs.

RecyclerView DiffUtil: Myers Diff, Payloads, and AsyncListDiffer

A practical look at RecyclerView DiffUtil, from Myers shortest edit scripts to payload updates, AsyncListDiffer background computation, callback timing, and cache-friendly list updates.

Android Emulator Performance: QEMU, Hypervisors, GPU, and Snapshots

A full-stack look at Android Emulator performance, from QEMU and KVM acceleration to GPU rendering, virtio-gpu, snapshots, and measurable tuning strategies.

Android 16 Live Updates: Real-Time Notifications and Capsule UI

How Android 16 Live Updates separate notification structure from state changes, using segmented progress and incremental synchronization to reduce IPC cost and support persistent status-bar capsules.

What Does AudioFlinger Do in the Android Audio System?

Explains AudioFlinger's role in the Android audio pipeline, including mixing, threads, AudioTrack, low-latency playback, and AAudio.