У меня есть в бета-тестах, которые получают ANR на Pixel, и Pixel 2 XL оба работают 8.1. Из журналов, которые я получаю, кажется, что вызов AAssetManager_open заблокирован, ожидая разблокировки мьютекса.
Из журнала нет заметных конфликтов потоков. На одном устройстве это происходит на третьем ресурсе, читаемом во время загрузки приложения. Все из которых являются отдельными (и очистить), но последовательно. Другое устройство тупик позже. Никакие темы не касаются связанного кода.
Мне еще не приходилось сталкиваться с этой проблемой на другом устройстве, поэтому я даже не могу поиграть с ним локально, чтобы понять дальше (у меня нет ни одного устройства). Из того, что я нашел в Android-источнике, заблокированный мьютекс не имеет ничего сложного в его использовании.
Вызовы происходят в главном потоке (отсюда и ANR), поэтому я могу исправить проблему, переместив их туда. В идеале, однако, я хочу исправить (или, по крайней мере, понять причину) основную проблему того, почему в первую очередь на этих устройствах происходит взаимоблокировка.
Итак, что меня интересует, есть ли какие-либо известные способы создания тупика с помощью AAssetManager_open?
Кстати, шкаф, который я нашел, - это отдельная статья, в которой упоминается прохождение людьми, получающими ANR на AAssetManager_open в предварительных сборках Oreo, но я не могу найти ничего другого по этому поводу.
Редактировать : Я знаю, что произошел сбой на другом устройстве 8.1 (OnePlus5), поэтому он не относится к пикселям, а к 8.1 вообще.
Я также перенес то, что AssetManager считывает в основном потоке, просто в случае, и, как и ожидалось, проблема все еще существует (просто не получайте ANR).
Редактировать # 2 : Это специфично для 8.1 с посредничеством AdMob.