12

ライブ壁紙がクラッシュする、以下のコード

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: SurfaceTexture へのバッファのキューイング エラー、-19

06-07 19:49:09.143: E/SurfaceTextureClient(13629): queueBuffer (handle=0x1c1b30) が失敗しました (そのようなデバイスはありません) 06-07 19:49:09.143: W/dalvikvm(13629): threadid=11: スレッドが終了していますキャッチされない例外あり (group=0x40c671f8) 06-07 19:49:09.143: E/AndroidRuntime(13629): FATAL EXCEPTION: Thread-692

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

06-07 19:49:09.143: E/AndroidRuntime(13629): android.view.Surface.unlockCanvasAndPost(ネイティブ メソッド) で

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

前もって感謝します

4

1 に答える 1

3

これは通常、ライブ壁紙ピッカーでデバイスを回転させたときに発生します。私が見つけた唯一の解決策は、IllegalArgumentException をキャッチして無視することです。

if (canvas != null) {
    try {
        holder.unlockCanvasAndPost(canvas);
    } catch (IllegalArgumentException e) {
        // Ignore weird bug when rotating in live wallpaper picker
    }
}
于 2013-04-08T08:22:41.203 に答える