[英]I get java.lang.StackOverflowError: stack size 8MB when i draw my canvas
我正在尝试使用画布在视图上绘制一些点。 但是,一旦我尝试用
view.draw(canvas);
我收到错误java.lang.StackOverflowError: stack size 8MB
,然后我的应用程序立即崩溃。 有人知道我如何缩小画布尺寸或修复此错误吗?
这是我当前的代码:
onDrawListener = new OnDrawListener() {
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
try {
Log.d("PdfViewer", "Drawing view");
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawPoint(canvas.getWidth() /2, canvas.getHeight() /2, paint);
view.draw(canvas); //here i get the error
} catch (Exception e) {
Log.d("PdfViewer", e.toString());
}
}
};
谢谢
您提到的view.draw(canvas);
行调用view.draw(canvas);
这将调用您的onDrawListener
,后者调用view.draw(canvas)
,后者调用您的onDrawListener
,后者调用view.draw(canvas)
,依此类推...
每次一个函数调用另一个函数时,它都会通过“堆栈帧”将数据传递给正在调用的函数。 这会占用内存空间,并且当与它关联的函数返回时,每个堆栈帧都会被释放。 由于您的onDrawListener
会onDrawListener
调用,因此它将永远不会返回,并且该内存将一直被使用,直到没有剩余的内存为止。
删除突出显示的行,并假设没有其他问题,则该行应该起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.