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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post
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.
Read Post