मैं एक SurfaceView उपclass लागू कर रहा हूँ, जहां मैं एक SurfaceHolders कैनवास पर आकर्षित करने के लिए एक अलग धागा चलाते हैं। मैं lockCanvas()
पर कॉल करने से पहले और बाद में समय माप रहा हूं, और मुझे लगभग 70ms से 100ms तक मिल रहा है। क्या कोई मुझे इंगित कर सकता है कि मुझे इतना ऊंचा समय क्यों मिल रहा है? यहाँ कोड के प्रासंगिक भाग:लॉक कैनवास() धीमा क्यों है?
public class TestView extends SurfaceView implements SurfaceHolder.Callback {
....
boolean created;
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
mThread = new DrawingThread(mHolder, true);
mThread.onWindowResize(width, height);
mThread.start();
}
public void surfaceCreated(SurfaceHolder holder) {
created = true;
}
public void surfaceDestroyed(SurfaceHolder holder) {
created = false;
}
class DrawingThread extends Thread {
public void run() {
while(created) {
Canvas canvas = null;
try {
long t0 = System.currentTimeMillis();
canvas = holder.lockCanvas(null);
long t1 = System.currentTimeMillis();
Log.i(TAG, "Timing: " + (t1 - t0));
} finally {
holder.unlockCanvasAndPost(canvas);
}
}
ठीक है, धन्यवाद। मैंने पहले ही इसे पढ़ लिया है, और अवधारणाओं को समझ लिया है। लेकिन मुझे अभी तक कोई समाधान नहीं मिला है। भले ही मैं 'सिंक्रनाइज़' ब्लॉक को हटा दूं (जिसे अनुशंसित नहीं किया गया है), यह मेरी मदद नहीं करता है। अभी भी उन उच्च समय। – kaneda