壁纸崩溃并显示错误 - queueBuffer:将缓冲区排队到SurfaceTexture时出错。

11

动态壁纸崩溃,以下是代码

public void render(){


    Canvas canvas = null;
    try{

        canvas = this._surfaceHolder.lockCanvas(null);
        synchronized (this._surfaceHolder) {
            this.onDraw(canvas);
        }

    }catch(Exception e){ Log.w("Surface holder ", e.toString());}

    finally{
        if(canvas != null){
            this._surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }   
}

protected void onDraw(Canvas canvas) {
    this.renderBackGround(canvas);
    for (Renderable renderable : this._fishes) {
        renderable.render(canvas);
    }
};

以下错误导致应用崩溃

06-07 19:49:09.143: E/SurfaceTextureClient(13629): queueBuffer: error queuing buffer to SurfaceTexture, -19

06-07 19:49:09.143: E/SurfaceTextureClient(13629): queueBuffer (handle=0x1c1b30) failed (No such device) 06-07 19:49:09.143: W/dalvikvm(13629): 线程id=11: 线程退出时未捕获的异常 (group=0x40c671f8) 06-07 19:49:09.143: E/AndroidRuntime(13629): 致命异常: Thread-692

06-07 19:49:09.143: E/AndroidRuntime(13629): java.lang.IllegalArgumentException

06-07 19:49:09.143: E/AndroidRuntime(13629): at android.view.Surface.unlockCanvasAndPost(Native Method)

06-07 19:49:09.143: E/AndroidRuntime(13629): at com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)

提前感谢您的帮助。


你解决了这个问题吗?我也遇到了同样的问题,似乎在互联网上没有记录的解决方案。 - gsgx
1个回答

3

通常这种情况会在你在现场墙纸选择器中旋转设备时发生。我找到的唯一解决方案是捕获 IllegalArgumentException 并将其忽略。

if (canvas != null) {
    try {
        holder.unlockCanvasAndPost(canvas);
    } catch (IllegalArgumentException e) {
        // Ignore weird bug when rotating in live wallpaper picker
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接