我正在开发一个动态壁纸,我有一个问题一直困扰着我。当我的动态壁纸变成风景,然后连续几次回到肖像时,它会崩溃。 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);线。 我在其他地方读过,尝试解锁未锁定的画布可能会导致此错误,但我已经检查过,这不是问题:画布在每次尝试解锁之前都会被锁定。
答案 0 :(得分:1)
在我的'finally'块中添加了try / catch块之后,动态壁纸停止了崩溃。 我的'finally'块现在看起来像这样:
try {
if (c != null) {
holder.unlockCanvasAndPost(c);
}
} catch (IllegalArgumentException exception) {
exception.printStackTrace();
}