11

只需单击一个简单的按钮,我就从我的应用程序中收到了一些错误消息。单击后动画应该开始,但按钮变得更大。它在大多数设备上都能完美运行,但在某些设备上(我认为主要是 4.X 及更高版本)它会崩溃。

异常消息(堆栈跟踪):

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)

提前致谢!

4

2 回答 2

2

这两天我一直在寻找这个问题的答案。它记录在 ICS 中,但我在我的一部测试手机中注意到它,它是运行 4.1.2 的三星 Galaxy S3。大多数人建议关闭硬件加速;我不想这样做,因为硬件加速使我的动画非常流畅。所以我发现如果我重写 draw() 尝试捕获空指针异常,硬件加速功能(大部分时间)都可以工作,并且足以让你永远不会注意到它们没有工作或抛出异常。

@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);
    }
}
于 2013-06-08T17:14:05.363 回答
0

我已经看到了同样的错误,这很奇怪,但只发生在非常特定的场景中。

我会在这里描述它以防它帮助任何人。

当我在打开硬件加速的 ICS 设备上运行一个视图(基本上缩小到屏幕中间)的比例动画时,它会出现。

  • 在 ICS 上,硬件加速关闭,它不会崩溃。
  • 在 ICS、硬件加速、其他动画类型(增长、翻译)上它不会崩溃。
  • 在 Jelly Bean (4.1, 4.3)(其他因素的任何组合)上,它不会崩溃。

我想我会为那个视图禁用硬件加速并继续前进,这样我的应用程序的其余部分就会顺利运行。

希望这可以帮助。

于 2013-10-15T13:40:16.767 回答