मैंने अपना पहला लाइव वॉलपेपर एक अलग धागे में ड्राइंग को लागू करने के लिए बनाया है। तो अब मेरे पास एक वॉलपेपर सेवा है और मेरा वॉलपेपरपेन्टर जो नौकरी करता है। समस्या यह है कि मुझे कुछ डिवाइसों पर unlockCanvasAndPost
विधि में IllegalArgumentException
मिल रहा है (सैमसंग नोट एक है)। मैंने उन सभी सिफारिशों को पढ़ लिया है जो मुझे मिल सकती हैं लेकिन उस बग को ठीक नहीं कर सका। लगता है कि unlockCanvasAndPost
कहा जाता है जब सतह नष्ट हो जाती है तो कैनवास अमान्य है।अनलॉक कैनवास एंडपोस्ट (एंड्रॉइड लाइव वॉलपेपर) में अवैध अर्ग्यूमेंट अपवाद
वॉलपेपर सेवा में:
@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) { }
}
}
}
}
किसी को भी मुझे किसी भी सुराग मैं गलत क्या कर रहा दे सकते हैं यहाँ कोड के आवश्यक हिस्से है? मैं जावा और एंड्रॉइड दोनों के लिए नया हूँ।