下载在Android 4.3中恢复

我得到一个IllegalStateException:恢复异常的下溢,这导致我的应用程序崩溃.
这开始发生在 Android 4.3更新之后.在android 3.0 – 4.2.x它工作正常.

第二个例外发生

canvas.restore();

以下是我的图纸代码

private void doDraw(Canvas canvas) {
        if(mTickerBackGround!=null && (!mTickerBackGround.isRecycled())){
            canvas.drawBitmap(mTickerBackGround,null);
        }
        if((mBitMapBuffer!=null)){
            canvas.save();
            canvas.translate(mX,0);
            if(!mBitMapBuffer.isRecycled()){
                canvas.drawBitmap(mBitMapBuffer,null);
            }
            canvas.restore();

            if(bitMapWidth+mX<mCanvasWidth){
                canvas.translate(bitMapWidth+mX,0);    
                if(!mBitMapBuffer.isRecycled()){
                    canvas.drawBitmap(mBitMapBuffer,null);
                }
                canvas.restore();                   
            }

            if(bitMapWidth+mX<=0){
                mX = 0;
            }else if(Math.abs(mX)>(bitMapWidth)){                   
                mX= mCanvasWidth; 
            }

            mX-=TickerConstants.SCROLLING_SMOOTHnesS*density;;
        }
        if(mlogo!=null && (!mlogo.isRecycled())){
            canvas.drawBitmap(mlogo,mCanvasWidth-(60*density),mlogo.getHeight()/6,null);
        }
    }

我的问题是

>这个错误的意思是什么?
>如何解决这个错误

生成的堆栈跟踪消息是.第165行对应于第二个canvas.restore()

08-13 18:13:09.083: E/AndroidRuntime(14139): FATAL EXCEPTION:
Thread-506 08-13 18:13:09.083: E/AndroidRuntime(14139):
java.lang.IllegalStateException: Underflow in restore 08-13
18:13:09.083: E/AndroidRuntime(14139): at
android.graphics.Canvas.restore(Native Method) 08-13 18:13:09.083:
E/AndroidRuntime(14139): at
com.my.package.name.ticker.TickerSurfaceView$TickerThread.doDraw(TickerSurfaceView.java:165)
08-13 18:13:09.083: E/AndroidRuntime(14139): at
com.my.package.name.ticker.TickerSurfaceView$TickerThread.run(TickerSurfaceView.java:128)

解决方法

错误在你的代码的这一部分:
if(bitMapWidth+mX<mCanvasWidth){
        canvas.translate(bitMapWidth+mX,0);    
        if(!mBitMapBuffer.isRecycled()){
            canvas.drawBitmap(mBitMapBuffer,null);
        }
        canvas.restore();                   
    }

调用的是restore(),而不是首先调用save().您甚至不需要调用translate(),也可以将x和y坐标传递给drawBitmap()调用.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...