[英]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.