Подтвердить что ты не робот

NoClassDefFoundError: android.app.ANRManagerProxy

Кто-нибудь знает, почему это происходит? Я вижу этот сбой, сообщенный моим приложением, но я понятия не имею, что это такое.

java.lang.NoClassDefFoundError: android.app.ANRManagerProxy

Thread: Binder_3, Exception: java.lang.NoClassDefFoundError: android.app.ANRManagerProxy 
at android.app.ANRManagerNative.asInterface(ANRManagerNative.java:30) 
at android.app.ANRManagerNative$1.create(ANRManagerNative.java:94) 
at android.app.ANRManagerNative$1.create(ANRManagerNative.java:88)
at android.util.Singleton.get(Singleton.java:34) at android.app.ANRManagerNative.getDefault(ANRManagerNative.java:37) 
at android.os.MessageLogger.dump(MessageLogger.java:253) 
at android.app.ANRAppManager.dumpMessageHistory(SourceFile:38) 
at android.app.ActivityThread$ApplicationThread.dumpMessageHistory(ActivityThread.java:1176) 
at android.app.ApplicationThreadNative.onTransact(ApplicationThreadNative.java:609) 
at android.os.Binder.execTransact(Binder.java:351) 
at dalvik.system.NativeStart.run(Native Method)
4b9b3361

Ответ 1

Эту ошибку можно увидеть на небольшой группе устройств (у меня нет списка, но они, как правило, не называются брендами), разработчики прошивки по неизвестным причинам удалили ANRManagerProxy из рамок устройства (Я подтвердил это, обыскав прошивку и самостоятельно декомпилировав ее).

Лучшее, что вы можете сделать, это попытаться выследить любой возможный код, который может блокировать поток, и заставить устройство перестать отвечать на запросы и попытаться использовать AsyncTask или аналогичный для асинхронного запуска кода и избежать ANR, Устройства, о которых идет речь, всегда имеют низкое значение, поэтому ваш код займет больше времени и больше шансов на то, чтобы это произошло.

Я предлагаю Hugo как отличную библиотеку для отладки времени выполнения метода, чтобы ограничить ваше внимание на том, сколько времени тратится. Это поможет улучшить код для всех пользователей, а также снизить риск возникновения сбоя.

Ответ 2

Это происходит, потому что

  • ваше приложение id делает тяжелую работу в основном (GUI) потоке

и

  • целевое устройство испортило прошивку

Вот список устройств, где я чаще встречался с ошибкой - , поэтому не только низкоуровневые устройства, будьте осторожны, вы проигнорируете это:-)

Lenovo A316i, N5i, V769M, G3 orro, V5, G3, X-2, F-G906, Z350, V10, G910, EVOLVEO StrongPhone D2, A70C, G9006, V13, C3000, n968, SM-T322, H9503, GT-H9503, S5, F1, Lenovo TP-6000, Galaxy Tab SM-T700C...

Единственное, что вы можете сделать по этому поводу - это сделать ваше приложение отзывчивым. Лучший способ сделать это - использовать во время разработки и тестирования Strict Mode, т.е. Сделать что-то вроде этого:

public void onCreate() {
    if (DEVELOPER_MODE) {
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
             .detectDiskReads()
             .detectDiskWrites()
             .detectNetwork()   // or .detectAll() for all detectable problems
             .penaltyLog()
             .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
             .detectLeakedSqlLiteObjects()
             .detectLeakedClosableObjects()
             .penaltyLog()
             .penaltyDeath()
             .build());
    }
    super.onCreate();
}