В консоли Google Play есть очень полезная страница «Android vitals» / «ANRs & crash». Информация, представленная в разделе «Сбои», почти полезна (например, NullPointerException в «имя файла, номер строки»). Это то, с чем нужно работать. Однако информация в разделе «ANRs» (активность не отвечает) в основном загадочна.
Например, я написал приложение, которому необходим доступ для чтения / записи во внешнее хранилище, которое не обязательно является съемной SD-картой. , Начиная с Android 4.2 (API 17), доступ к внешней SD-карте больше невозможен. Вместо этого есть ссылка на «/ mnt / sdcard» или «/ storage / emulated / 0», которая находится во внутренней памяти. (Почему это называется «внешним хранилищем» - это секрет Google.)
Конечно, я установил необходимые записи в AndroidManifest. xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
и, конечно, с Android 6 (Зефир), я правильно обрабатываю разрешения с помощью
requestPermissions(requPerms, myRequestCode);
и
onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
Чтобы определить путь хранения для файлов данных приложения (например, "/ storage / emulated / 0 "), я использую следующий код:
public static File getMountName()
{
File mount = null;
// possible ANR 1
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED))
{
// possible ANR 2
File path = Environment.getExternalStorageDirectory();
mount = new File(path.getAbsolutePath());
}
return mount;
} // getMountName
По некоторым причинам некоторые смартфоны пользователя зависают с« ANR »в одной из двух строк« Environment.getExternalStorage… », помеченных соответствующий комментарий. (Это означает, что если они висят на 2-й строке, они успешно прошли 1-ю.)
Соответствующие сообщения об ошибках в Android vitals показаны в следующих примерах:
for ANR 1:
Тайм-аут отправки входных данных (Ожидание отправки неключевого события, поскольку затронутое окно не завершило обработку определенных входных событий, которые были ему доставлены в течение 500,0 мсек go. Очередь ожидания длина: 2. Ожидание возраста очереди очереди: 14805,0 мс.)
и для ANR 2:
Context.startForegroundService () не вызывал Service.startForeground () : ServiceRecord {33def99 u0 net .braun_home.sensorrecording.lite /net .braun_home.sensorrecording.SensorService}
Кто-нибудь знает, что означают эти сообщения и почему они появляются в некоторых только смартфоны? Согласно Android vitals, все они имеют более новые Android версии 8 или 9. У меня тоже есть два устройства с этими версиями, и приложение отлично работает там.