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) 

这个错误可以在一小组设备上看到(我没有列表,但它们往往是无名品牌),其固件开发人员,由于未知原因,从设备框架中删除了ANRManagerProxy (我通过以下方式证实了这一点)寻找固件并自行反编译)。

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

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

这发生了,因为

  • 你的app id在main(GUI)线程中做了一些繁重的工作

  • 目标设备搞乱了固件

这是一个设备列表,我经常遇到这个错误 – 所以不仅低端设备 ,小心你会忽略它:-)

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