25

Bunun neden olduğunu bilen var mı? Uygulamamın bildirdiği bu kilitlenme görüyorum ama ne olduğu hakkında hiçbir fikrim yok.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) 
+0

, hata mesajı verilir: bunu en iyi yolu böyle bir şey yapmak için, yani gelişme ve test Sıkı Modu sırasında kullanmaktır uzun bir süre için ana uygulama iş parçacığı. Bunun bir bağlayıcı ip üzerinde meydana gelmesi gerçeği, belki de 'ANRManagerProxy', Binder IPC iş parçacığı havuzu da dahil olmak üzere anahtar iş parçacığı bağlama izleyicisidir. Ana uygulama iş parçacığını veya herhangi bir Binder iş parçacığını (ör. AIDL ile uzaktan hizmet) bağlamadığınızdan emin olun. Bununla birlikte, bazı Android sürümlerinin neden bu sınıfı kaçırdığına ve size "NoClassDefFoundError" değerini verdiğine dair bir fikrim yok. – CommonsWare

+0

Bu yalnızca belirli bir cihazda mı oluyor? – JonasCz

+0

@JonasCz Kesinlikle söyleyemem ama bence evet. –

cevap

13

Bu hata, bilinmeyen nedenlerle, kimin firmware geliştiriciler cihazların küçük bir grup (Bir listem yok, ama onlar no-name markaları olma eğilimindedir) görülebilir dan ANRManagerProxy kaldırıldı cihaz çerçevesi (bunu bir firmware'i aşağı indirip bunu kendim çözerek onayladı).

Yapabileceğiniz en iyi şey, iş parçacığını kilitleyen ve aygıtın yanıt vermemesine neden olabilecek olası bir kodu avlamaya çalışmaktır ve AsyncTask kodunu veya eşzamansız olarak kod çalıştırmak için benzerlerini kullanmayı deneyin ve ANR'den kaçının. Söz konusu cihazlar her zaman düşük düzeydedir ve bu nedenle kodunuzun çalışması daha uzun sürecek ve bunun gerçekleşmesi için daha büyük bir şansa sahip olacaktır.

Hugo hata ayıklama yöntemi yürütme süreleri için, en çok harcanan zamana odaklanmanızı azaltmak için harika bir kitaplık öneririm. Bu, tüm kullanıcılar için kodunuzu iyileştirmeye ve söz konusu kilitlenme riskini azaltmaya yardımcı olacaktır.

+3

vay, böyle iyi bir "özellik" görüyorum. "- Hey adam, çerçeveden rastgele sınıfları çıkarmalı mıyız? - Tabii kardeşim, bu harika bir fikir" –

3

bu olur,

  • ana (GUI) bazı ağır işi uygulama id iplik

ve

  • hedef cihaz firmware berbat çünkü

Burada daha sık hata deneyimli cihazlar listesi - Eğer

Lenovo A316I :-) bunu göz ardı eder dikkatli olun, bu yüzden sadece düşük uç cihazlar, 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 ...

Bu konuda yapabileceğiniz tek şey uygulamanızı yanıtlamaktır. meşgul olduğunda

Eh, ANR genellikle "uygulama yanıt vermiyor" ile ilişkilidir
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(); 
} 
İlgili konular