0

私はライブ壁紙を開発していますが、しばらくの間私を悩ませてきた問題があります。私のライブ壁紙は、横向きになってから数回続けて縦向きに戻るとクラッシュします。LogCatは次のエラーを示しています。

致命的な例外:メインjava.lang.IllegalArgumentException at android.view.Surface.unlockCanvasAndPost(Native> Method)at com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)at 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);です。ライン。ロックされていないキャンバスのロックを解除しようとするとこのエラーが発生する可能性があることを他の場所で読みましたが、それを確認しました。それは問題ではありません。キャンバスは、ロックを解除しようとする前に毎回ロックされます。

4

1 に答える 1

1

'finally'ブロック内にtry/catchブロックを追加した後、ライブ壁紙のクラッシュが停止しました。私の「finally」ブロックは次のようになります。

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

            } catch (IllegalArgumentException exception) {
                exception.printStackTrace();
            }
于 2012-10-14T12:17:05.067 に答える