动态壁纸:IllegalArgumentException解锁CanvasAndPost时转入横向

时间:2012-10-13 21:42:00

标签: android canvas live-wallpaper illegalargumentexception

我正在开发一个动态壁纸,我有一个问题一直困扰着我。当我的动态壁纸变成风景,然后连续几次回到肖像时,它会崩溃。 LogCat显示以下错误:

  

致命的例外:主要   java.lang.IllegalArgumentException异常   在android.view.Surface.unlockCanvasAndPost(Native> Method)   在com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)   在livewallpaper.LiveWallpaper $ CatWallEngine.draw(LiveWallpaper.java:167)....

这是代码:

    public void draw() {
        SurfaceHolder holder = getSurfaceHolder();
        Canvas c = null;
        paint = new Paint();
        try {
            c = holder.lockCanvas();
            if (c != null ) {
                //drawing code goes here
            }

        } finally {
            if (c != null) {
                holder.unlockCanvasAndPost(c);
            }
        }

        mHandler.removeCallbacks(mUpdateDisplay);
        if (mVisible) {
            mHandler.postDelayed(mUpdateDisplay, 50);
        }

第167行是holder.unlockCanvasAndPost(c);线。 我在其他地方读过,尝试解锁未锁定的画布可能会导致此错误,但我已经检查过,这不是问题:画布在每次尝试解锁之前都会被锁定。

1 个答案:

答案 0 :(得分:1)

在我的'finally'块中添加了try / catch块之后,动态壁纸停止了崩溃。 我的'finally'块现在看起来像这样:

            try {
                if (c != null) {
                    holder.unlockCanvasAndPost(c);
                }

            } catch (IllegalArgumentException exception) {
                exception.printStackTrace();
            }