2012-10-11 11 views
11

Uygulamamdan basit bir düğme tıklamasıyla bazı hata mesajları aldım. Tıklamadan sonra bir animasyon başlamalı, ancak düğme büyür. Çoğu cihazda mükemmel çalışır, ancak bazılarında (çoğunlukla 4.X ve üstü) çöküyor.Hardwareacceleration ile NullPointerException açık mı?

İstisna mesajı (Yığın İzleme): Önceden

java.lang.NullPointerException 
at android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:118) 
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:400) 
at android.view.View.draw(View.java:10999) 
at android.view.ViewGroup.drawChild(ViewGroup.java:3186) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) 
at android.view.ViewGroup.drawChild(ViewGroup.java:3184) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) 
at android.view.ViewGroup.drawChild(ViewGroup.java:3184) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) 
at android.view.ViewGroup.drawChild(ViewGroup.java:3184) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) 
at android.view.View.draw(View.java:11017) 
at android.view.View.getDisplayList(View.java:10444) 
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2896) 
at android.view.View.getDisplayList(View.java:10407) 
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2896) 
at android.view.View.getDisplayList(View.java:10407) 
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2896) 
at android.view.View.getDisplayList(View.java:10407) 
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:883) 
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2089) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1781) 
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2666) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:156) 
at android.app.ActivityThread.main(ActivityThread.java:4977) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 

teşekkürler!

cevap

2

Son birkaç gündür bunun cevabını araştırıyorum. ICS'de belgelendi ancak test telefonlarından birinde Samsung Galaxy S3'ün 4.1.2'de çalıştığını fark ettim. Çoğu insan, donanım hızlandırmayı kapatmayı önerir; Bunu yapmak istemedim çünkü donanım hızlandırması animasyonlarımı bu kadar ipeksi bir hale getiriyor. Yani ne bulduğum()()()()() çoğu zaman() çoğu zaman işe yaramaz ve istisna atmıyorlar.

@Override 
public void draw(Canvas canvas) { 
    try{ 
     super.draw(canvas); 
    }catch(java.lang.NullPointerException e){ 
     //you can log if you want to you can leave your friends behind 
     //Log.e("mytag","MyCustomView::draw():"+e); 
    } 
} 
+1

Kısalıklık için ayrılmıştır. "Draw" yöntemi herhangi bir uygulama kodunu çalıştırmaz, bu yüzden uygulama mantığınız herhangi bir boş gösterici istisnası atarsa, başka bir yerde (olayda, vb.) Yakalanırlar, ancak çizim yaparken kesinlikle olmazlar. Yeniden çizme gerçekleştiğinde uygulamanızın yaptığı çok az şey var. Bu yöntem uygulamanız için güvenli olduğunu tahmin ediyorum. Ama cihaz için güvenli olup olmadığını bilmiyorum. – Subhas

0

Bu aynı hatayı gördüm ve garip ama sadece çok özel bir senaryoda gerçekleşiyor.

Herkese yardımcı olması durumunda bunu burada açıklayacağım.

HW hızlandırması açıkken bir ICS aygıtında bir görünümde% 0'a (temel olarak ekranın ortasına daraltılır) çıkan bir ölçek animasyonu çalıştırdığımda görünür.

  • ICS'de, HW hızlandırması kapalı, kilitlenmez.
  • ICS'de, HW hızlanma açıkken, diğer animasyon türleri (büyümek, çeviri) çökmez.
  • Jelly Bean'de (4.1, 4.3) (diğer faktörlerin herhangi bir kombinasyonu) çökmez.

Sadece bu görünüm için HW hızlandırmayı devre dışı bırakacağım ve devam edersem uygulamamın geri kalanı sorunsuz bir şekilde çalışacağım.

Bu yardımcı olur umarım.

İlgili konular