Android Performance

Some Thoughts on Android System Fluency

Word count: 845Reading time: 5 min
2018/08/13
loading

I’ve long wanted to write about Android system fluency because it’s the most direct aspect of the user experience. The long-standing criticism that Android “gets laggier over time” still casts a shadow over the platform, and it’s a primary reason many users default to iPhone.

Because Google keeps Android open, different manufacturers produce devices with vastly different hardware, and app quality varies wildly. Consequently, fluency is affected by countless factors. It’s rarely just “the system isn’t optimized.” Often, two devices with the same OS but different SOCs offer completely different experiences.

In this post, I want to discuss the factors affecting Android fluency from several perspectives:

  1. Hardware
  2. System
  3. Applications
  4. The Optimization Loop

1. Hardware Level

CPU

The CPU is the most critical component. Most Android operations interact with it, and its performance directly determines a phone’s tier. Rankings generally follow: Qualcomm > Huawei > Samsung > MediaTek.

GPU

Integrated into the SoC, the GPU’s power primarily affects graphics-heavy tasks like PUBG Mobile, Honkai Impact 3rd, and racing games. Interestingly, games like Honor of Kings are often more CPU-bound than GPU-bound.

RAM

As Android and hardware evolve, memory demand grows. 4GB is now the baseline, with 6GB or 8GB common in flagships. Larger RAM allows the system to “trade space for time”: caching more background processes, aggressive pre-loading, and relaxed tuning for VMs and rendering. This results in a “faster” feel for the user.

Storage (UFS vs. EMMC)

UFS is the modern standard for mobile flash storage. For the best experience, avoid EMMC-based devices, as UFS significantly improves file reading, video loading, and file copying speeds.

Screen Resolution

Higher resolutions (like 2K) impact performance in screenshots, recording, and composition. If hardware can’t support it—like the Meizu MX4 Pro—the result is a laggy, battery-hungry device. Many 2K phones now default to 1080P in certain scenarios to maintain performance.

SoC Platform

The SoC (System-on-a-Chip) is the foundation of the experience. Qualcomm’s platform is currently the most mature, providing extensive optimization code on top of AOSP and robust documentation, explains why so many Chinese OEMs prefer it.


2. System Level

App Management Policies

Chinese OEMs are known for aggressive background management. This is a reaction to “family buckets” (app clusters) that maliciously wake each other up. Most lag reported by users stems from rogue background apps consuming CPU and RAM that the average user doesn’t know how to manage.

Common system restrictions include:

  • Preventing apps from silently launching other apps.
  • Preventing unnecessary background residency.
  • Restricting CPU usage during screen-off.

Memory Strategy

OEMs tune parameters like LowMemoryKiller thresholds and background process limits based on device RAM. In low-end devices, memory shortage leads to frequent process killing and heavy disk I/O (swapping), which feels like “lag” to the user.

Process Scheduling

If critical rendering tasks aren’t scheduled correctly, the app will stutter. Trace data usually shows this as “Runnable” states. Factors include:

  • Too many concurrent processes.
  • Low process priority.
  • Insensitive schedulers failing to respond to heavy tasks.
  • Thermal or low-battery throttling limiting the “Big” cores.
  • WMS/AMS lock contention.

Main Thread & Render Thread

Most application lag occurs here. Bottlenecks often include:

  • Long input event processing.
  • Heavy animation logic (e.g., new Item generation in ListView).
  • Complex Measure/Layout/Draw cycles.
  • Frequent uploads of large Bitmaps.

Triple Buffering

Introduced in Project Butter, Vsync and Triple Buffering significantly improved Android smoothness. They allow the system to handle occasional frames that exceed the 16ms threshold without a visible stutter.

Virtual Machine (ART vs. Dalvik)

ART significantly liberated the main thread by reducing “Stop-the-World” GC pauses, which were a primary source of jank in the Dalvik era.


3. Application Level

Complex Layouts

The primary culprit for app lag. Complex hierarchies mean slower Measure/Layout/Draw cycles, especially during scrolling where new items are initialized.

Excessive Business Logic

Heavyweight apps like Taobao often feel sluggish during cold starts because they are busy dynamically loading modules and performing dex2oat operations in the background.

Memory Churn

Frequent allocation and deallocation lead to “memory churning,” visible as a sawtooth pattern in Android Studio’s memory monitor. This often indicates suboptimal code.

Slow Networking

Long network wait times are often perceived by users as “the app is laggy.”

Suboptimal Design

Sometimes design and performance are at odds. Complex, nested animations can be a nightmare to implement efficiently, working well on flagships but failing on low-end hardware.


4. The Optimization Loop

Laboratory Monitoring

Use data to monitor performance during development, simulating user environments to catch problems early.

Real-World Data Collection

Collect performance metrics from users to identify the most common issues. Be careful to avoid the “observer effect” where monitoring itself causes lag. Focus on system indicators that correlate with jank.

Targeted Optimization

Rank issues by frequency and impact. Often, this requires collaboration between OEMs and app developers. Incorporate these scenarios back into the lab environment to create a continuous improvement loop: Lab Monitor -> User Simulation -> Big Data Collection -> Targeted Fix -> Lab Update.

About Me && Blog

(Links and introduction)

CATALOG
  1. 1. 1. Hardware Level
    1. 1.1. CPU
    2. 1.2. GPU
    3. 1.3. RAM
    4. 1.4. Storage (UFS vs. EMMC)
    5. 1.5. Screen Resolution
    6. 1.6. SoC Platform
  2. 2. 2. System Level
    1. 2.1. App Management Policies
    2. 2.2. Memory Strategy
    3. 2.3. Process Scheduling
    4. 2.4. Main Thread & Render Thread
    5. 2.5. Triple Buffering
    6. 2.6. Virtual Machine (ART vs. Dalvik)
  3. 3. 3. Application Level
    1. 3.1. Complex Layouts
    2. 3.2. Excessive Business Logic
    3. 3.3. Memory Churn
    4. 3.4. Slow Networking
    5. 3.5. Suboptimal Design
  4. 4. 4. The Optimization Loop
    1. 4.1. Laboratory Monitoring
    2. 4.2. Real-World Data Collection
    3. 4.3. Targeted Optimization
  • About Me && Blog