Android 在画布上绘制比屏幕大得多的路径时内存不足
我有一个Android视图,它比视图的可见部分大(例如10000x6000像素),我想在onDraw()方法中绘制路径。仅绘制与视口相交的路径,并且在大多数情况下效果很好,但当绘制的路径的边界框比视口大得多时,会分配太多内存,导致应用程序崩溃,并出现内存不足错误。即使将剪辑边界设置为视口,也会为路径的边界框所占用的整个区域分配内存: 在上面的示例中,视口仅为2000x1400像素,但在画布上绘制路径时,会分配内存以适合完整路径(7000x4000像素=112 MB) 有没有办法限制在这种情况下分配的内存量 顺便说一句,iOS在使用剪辑边界时会限制渲染光栅图像的大小Android 在画布上绘制比屏幕大得多的路径时内存不足,android,android-canvas,android-view,Android,Android Canvas,Android View,我有一个Android视图,它比视图的可见部分大(例如10000x6000像素),我想在onDraw()方法中绘制路径。仅绘制与视口相交的路径,并且在大多数情况下效果很好,但当绘制的路径的边界框比视口大得多时,会分配太多内存,导致应用程序崩溃,并出现内存不足错误。即使将剪辑边界设置为视口,也会为路径的边界框所占用的整个区域分配内存: 在上面的示例中,视口仅为2000x1400像素,但在画布上绘制路径时,会分配内存以适合完整路径(7000x4000像素=112 MB) 有没有办法限制在这种情况下
编辑:看起来这是硬件渲染层的一个已知问题:我的解决方案可能不是最干净的,但满足了我的需要。我使用canvas.drawLines,它在每条线之间不留连接的交点,但工作起来非常顺利
float[] pathArray = new float[(nodes.size() - 1) * 4];
for (int i = 0; i < nodes.size() - 1; i++) {
int index = i * 4;
Node from = nodes.get(i);
pathArray[index] = from.x;
pathArray[index + 1] = from.y;
Node to = nodes.get(i + 1);
pathArray[index + 2] = to.x;
pathArray[index + 3] = to.y;
}
正如我所说,结果将是线之间的链接断开,但不会出现oom问题我猜您正在使用view ondraw方法绘制线,我将在一个主线程中运行以刷新视图,因此使用带有单独线程的曲面视图更新视图将解决此问题,主要用于游戏应用程序使用曲面视图绘制图形Surface View对于我需要做的事情来说是一件过分的事情。而且它不能解决渲染比屏幕大的路径所需的内存问题。
canvas.drawLines(pathArray, mDefaultPaint);