私は最初のライブ壁紙を作成し、別のスレッドで描画しました。今、私はWallpaperServiceと私のWallpaperPainterを持っています。問題は、デバイスの一部でをunlockCanvasAndPost
メソッドに取得していることです(Samsung Noteがその1つです)。私は見つけることができるすべての勧告を読みましたが、そのバグを修正できませんでした。サーフェスが破棄されたときにキャンバスが無効になるとunlockCanvasAndPost
が呼び出されたようです。ここでは、コードの重要な部分である:壁紙サービスでunlockCanvasAndPostのIllegalArgumentException(アンドロイドライブ壁紙)
: 絵画のスレッドで
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
super.onSurfaceChanged(holder, format, width, height);
painting.setSurfaceSize(width, height);
}
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
painting.start();
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
painting.stopPainting();
while (retry) {
try {
painting.join();
retry = false;
} catch (InterruptedException e) { }
}
super.onSurfaceDestroyed(holder);
}
:
public void stopPainting() {
this.run = false;
synchronized(this) {
this.notify();
}
}
public void run() {
this.run = true;
Canvas c = null;
while (run) {
try {
synchronized (this) {
Thread.sleep(50);
c = this.surfaceHolder.lockCanvas();
doDraw(c);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (c != null) {
this.surfaceHolder.unlockCanvasAndPost(c); // << -- HERE IS THE PROBLEM
}
}
// if pause...
synchronized (this) {
if (wait) {
try {
wait();
} catch (Exception e) { }
}
}
}
}
誰も私に私が間違ってやっている任意の手掛かりを与えることはできますか?私はJavaとAndroidの両方に新しいです。