Performance Articles

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.

Why Bitmap Causes OOM on Android: A Practical Guide to Image Memory

Explains Bitmap memory usage, Java heap vs. native heap, Hardware Bitmap, sampling, compression, and image loading optimization.

Getting Started with Android Perfetto

A beginner-friendly Android Perfetto workflow covering trace capture, key tracks, Binder, scheduling, rendering, and startup analysis.

Why Does Compose Recompose So Often? From Stability to State Read Placement

A practical guide to frequent Jetpack Compose recomposition, including unstable parameters, where state is read, derivedStateOf misuse, and list item design.

When Should You Use Paging 3 RemoteMediator?

Explains where Paging 3 RemoteMediator fits, how network and database pagination cooperate, cache-first lists, and common misuse cases.

Android Macrobenchmark: The Full Performance Benchmarking Workflow

A practical Macrobenchmark workflow for cold-start measurement, frame smoothness, custom trace metrics, and CI regression gates.