Large-scale Study on Android Not Responding

Table of Content

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.

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.

Measurement Code

We provide the code of this study on github.

Measurement Data

We provide some measurement data on github.

The attributes of each ANR/SNR event in the data are organized as follows:

• report_id

The ID of a reported event.

• android_version

The Android version.

• md5_imei

The MD5-encrypted device IMEI.

• type

The type of the event. Specifically, exp_anr denotes an ANR event and exp_jwdt denotes an SNR event.

• pid

The ID of the app/critical process.

• process_name

The name of the app/critical process.

• log

The file name of the log file.