该异常通常是由于在绘制界面时,某些绘制元素未准备好而引起的。为了解决此问题,可以按照以下步骤操作:
以下是一个示例代码,演示了如何避免此异常的发生:
// 正确使用 SurfaceView 的示例代码 public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; private MyThread myThread;
public MySurfaceView(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
myThread = new MyThread(holder);
myThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
myThread.stopThread();
myThread = null;
}
public class MyThread extends Thread {
private boolean isRunning;
private SurfaceHolder holder;
public MyThread(SurfaceHolder holder) {
this.holder = holder;
isRunning = true;
}
public void stopThread() {
isRunning = false;
}
@Override
public void run() {
while (isRunning) {
if (holder != null) {
Canvas canvas = holder.lockCanvas();
// 绘制操作
holder.unlockCanvasAndPost(canvas);
}
}
}
}
}
在上面的代码示例中,使用正确的上下文环境并避免了循环依赖或递归调用,以避免出现 android::uirenderer::RenderNode