NoClassDefFoundError: android.app.ANRManagerProxy

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.create(ANRManagerNative.java:94) 
at android.app.ANRManagerNative.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)

这个错误可以在一小部分设备上看到(我没有列表,但它们往往是无名品牌),其固件开发人员出于未知原因删除了 ANRManagerProxy来自设备框架(我通过寻找固件并自己反编译来确认这一点)。

您能做的最好的事情就是尝试找出任何可能锁定线程并导致设备无响应的代码,并尝试使用 AsyncTask 或类似于 运行 异步代码并避免 ANR。有问题的设备总是低端的,因此您的代码将花费更长的时间 运行 并且更有可能导致这种情况发生。

我建议 Hugo 作为调试方法执行时间的优秀库,以便将您的注意力集中在花费最多时间的地方。这将有助于为所有用户改进您的代码,并降低发生相关崩溃的风险。

发生这种情况,因为

  • 您的应用程序 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, 联想TP-6000, Galaxy Tab SM-T700C ...

您唯一能做的就是让您的应用响应。最好的方法是在开发和测试期间使用严格模式,即做这样的事情:

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