Android Poor Responsiveness
Almost all Android users have ever experienced poor responsiveness, including the common frame dropping events—slow rendering (SR) and frozen frames (FF), as well as the uncommon Application Not Responding (ANR) and System Not Responding (SNR) that directly disrupt user experience. This work takes two complementary approaches, controlled benchmarking and in-the-wild crowdsourcing, to comprehensively understand their prevalence, characteristics, and root causes, which turn out to be significantly different from common understandings and prior studies. We find that SR, FF, ANR, and SNR all occur prevalently on all the studied hardware models of Android phones, and better hardware does not seem to relieve ANR/SNR. Most surprisingly, they are oftentimes ascribed to defective software design that incurs substantial resource overuse—lightweight apps can experience severe SR/FF events due to redundant UI rendering, and the most ANR/SNR events stem from Android’s aggressive implementation of write amplification mitigation. In fact, the former can be effectively overcome by simplifying the apps’ UI hierarchy, and we design a practical approach to address almost all (>99%) of the latter while only decreasing 3% of the data write speed with large-scale deployment. We have released our measurement code/data to the research community.
Measurement Code and Data
Currently, we have partially released our measurement code and data as follows. We plan to release all code and data after we get approval from the authority.
SR/FF Benchmark Framework and Analysis Tool
The SR/FF benchmark framework and analysis tool are in GitHub. In particular, we have provided detailed usage guides and documented the benchmarking workloads.
ANR/SNR Monitor Infrastructure
The monitor infrastructure in our Android-MOD is implemented in Monitor.java.
Root Cause Analysis Pipeline
Our root cause analysis pipeline is implemented in Pipeline.java.
Our leveraged regular expressions are listed in Regex.java.
We provide some measurement data on GitHub.
The attributes of each ANR/SNR event in the data are organized as follows:
The ID of a reported event.
The Android version.
The type of the event. Specifically, exp_anr denotes an ANR event and exp_jwdt denotes an SNR event.
The ID of the app/critical process.
The name of the app/critical process.
The file name of the log file.