license - NoClassDefFoundError: android.app.ANRManagerProxy
google developer license (2)
Este error se puede ver en un pequeño grupo de dispositivos (no tengo una lista, pero tienden a ser marcas sin nombre) cuyos desarrolladores de firmware, por razones desconocidas, eliminaron el ANRManagerProxy
del marco del dispositivo (lo confirmé buscando un firmware y descompilarlo yo mismo).
Lo mejor que puedes hacer es tratar de encontrar cualquier código posible que pueda estar bloqueando el hilo y haciendo que el dispositivo no AsyncTask
, e intenta usar una AsyncTask
o similar para ejecutar el código de forma asíncrona y evitar el ANR. Los dispositivos en cuestión son siempre de gama baja, por lo que su código tardará más en ejecutarse y tendrá una mayor probabilidad de que esto suceda.
Yo sugeriría a Hugo como una gran biblioteca para depurar los tiempos de ejecución de métodos, con el fin de limitar su enfoque en dónde se está gastando más tiempo. Esto ayudará a mejorar su código para todos los usuarios, así como a reducir el riesgo de la falla en cuestión.
¿Alguien sabe por qué pasa esto? Veo este bloqueo informado por mi aplicación pero no tengo idea de qué es.
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)
Esto sucede porque
- su ID de aplicación haciendo un trabajo pesado en el hilo principal (GUI)
y
- dispositivo de destino ha arruinado el firmware
Aquí hay una lista de dispositivos, donde experimenté el error con más frecuencia, así que no solo los dispositivos de gama baja , tenga cuidado de ignorarlo :-)
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 ...
Lo único que puedes hacer al respecto es hacer que tu aplicación sea receptiva. La mejor manera de hacerlo es usarlo durante el desarrollo y prueba del Modo estricto, es decir, hacer algo como esto:
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();
}