अपने कोड के बिना बताना मुश्किल है, लेकिन मैं यह अपवाद देख रहा था, लेकिन केवल तभी जब मैंने लोडिंग समाप्त होने से पहले पूर्वावलोकन से दूर जाया था।
मेरे मामले में, यह क्योंकि मैं onSurfaceCreated
विधि से एक AsyncTask
शुरुआत की वजह से किया जा रहा था, लेकिन फिर समय यह बिंदु है जहां मैं surfaceHolder.lockCanvas()
बुलाया सतह पहले से ही नष्ट कर दिया गया गया है।
इस दौर प्राप्त करने के लिए मुझे लगता है कि वर्ग drawOk
कहा जाता है, इस तरह के overrode onSurfaceDestroyed
विधि, और था एक चर वैश्विक:
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
handler.post(reload);
drawOk = true;
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
handler.removeCallbacks(reload);
drawOk = false;
}
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if(visible) {
handler.post(reload);
drawOk = true;
} else {
handler.removeCallbacks(reload);
drawOk = false;
}
}
private void draw() {
SurfaceHolder surfaceHolder = getSurfaceHolder();
Canvas canvas = null;
if(drawOk) {
canvas = surfaceHolder.lockCanvas();
if(canvas != null) {
// ...
}
}
}
एक surfaceHolder.isCreating()
नहीं है, लेकिन नहीं एक surfaceHolder.isCreated()
। यह करने का सही तरीका नहीं हो सकता है, लेकिन यह मेरे लिए काम कर रहा है।
अपना कोड पोस्ट करें .. –