我在绘制画布时得到java.lang.StackOverflower错误:堆栈大小为8MB
我试图用画布在我的观点上画一些观点。 但当我试图用我的眼睛画我的画布时我在绘制画布时得到java.lang.StackOverflower错误:堆栈大小为8MB,java,android,android-canvas,Java,Android,Android Canvas,我试图用画布在我的观点上画一些观点。 但当我试图用我的眼睛画我的画布时 view.draw(canvas); 我得到错误java.lang.StackOverflower错误:堆栈大小8MB,然后我的应用程序立即崩溃。 有人知道如何缩小画布的大小或修复此错误吗 这是我目前的代码: onDrawListener = new OnDrawListener() { @Override public void onLayerDrawn(
view.draw(canvas);
我得到错误java.lang.StackOverflower错误:堆栈大小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)
这将调用您的ondrawstener
,它调用view.draw(canvas)
,它调用您的ondrawstener
,它调用view.draw(canvas)
,依此类推
每次函数调用另一个函数时,它都会通过“堆栈帧”将数据传递给正在调用的函数。这会占用内存空间,当与堆栈帧关联的函数返回时,每个堆栈帧都会被释放。由于您的onDrawListener
调用自身,它将永远不会返回,并且该内存将一直被使用,直到没有剩余内存
删除突出显示的行,并且假设不存在其他问题,它应该可以工作。这很可能意味着您有一个永恒的递归。你确定你的抽签电话不会导致它自己呼叫吗?崩溃时的调用堆栈是什么?当我删除该行时,我没有收到更多错误,但我的nothing在画布上绘制,你知道为什么吗?我不是这个图形库的专家,但基于命名约定,我想象每当你调用view.draw(画布)时,onDrawListener都会被调用。因此,绘制画布的代码应该在侦听器之外,可能在初始化方法中,除非这是您希望“每当有东西绘制到画布时”发生的代码