play license google developer android crash stack-trace noclassdeffounderror android-anr-dialog

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(); }