Almost every Android user has unsatisfying experiences regarding responsiveness, in particular Application Not Responding (ANR) and System Not Responding (SNR) that directly disrupt user experience. Unfortunately, the community have limited understanding of the prevalence, characteristics, and root causes of unresponsiveness. In this paper, we make an in-depth study of ANR and SNR at scale based on fine-grained system-level traces crowdsourced from 30,000 Android systems. We find that ANR and SNR occur prevalently on all the studied 15 hardware models, and better hardware does not seem to relieve the problem. Moreover, as Android evolves from version 7.0 to 9.0, there are fewer ANR events but more SNR events. Most importantly, we uncover multifold root causes of ANR and SNR and pinpoint the largest pathology which roots in Android's flawed implementation of Write Amplification Mitigation (WAM). We design a practical approach to eliminating this largest root cause; after large-scale deployment, it reduces almost all (>99%) ANR and SNR caused by WAM while only decreasing 3% of the data write speed. We will release our measurement code and data to the research community.
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.
We provide the code of this study on github.
The monitor infrastructure in our Android-MOD is implemented in
Root Cause Analysis Pipeline
Our root cause analysis pipeline is implemented in
Our leveraged regular expressions are listed in
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 MD5-encrypted device IMEI.
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.