Android OutOfMemory问题

时间:2011-06-30 19:24:42

标签: android sql memory out-of-memory

我正在解析设备上的二进制文件,并在数组中存储我关心的字段。这些文件可能会导致大小为100,000的数组。当然,java告诉我内存不足(我认为android只允许每个应用程序16MB)。

还有其他方法可以获取此数据吗?

基本上,我解析点和颜色信息,将其存储在数组中,然后使用vertexBuffers在OpenGL中绘制它们。将它们存储在数据库中对我没用,是吗?

谢谢!

编辑: 我对482,000点的文件进行了解析。它可以存储位置和颜色而不会崩溃。我在调试器中看到了这个:

Grow heap (frag case) to 43.164MB for 23156032-byte allocation
Forcing collection of SoftReferences for 30874704-byte allocation
Out of memory on a 30874704-byte allocation

错误填充在java.nio.ByteBuffer.allocateDirect上 我在下面列出了代码区域:

//Parse file and populate arrays
PointParser(fileName, header);

// a float is 4 bytes, therefore we multiply the number if 
// vertices with 4.
ByteBuffer vbb = ByteBuffer.allocateDirect(lasVertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(lasVertices);
vertexBuffer.position(0);   

ByteBuffer cbb = ByteBuffer.allocateDirect(lasColors.length * 4);
cbb.order(ByteOrder.nativeOrder());
colorBuffer = cbb.asFloatBuffer();
colorBuffer.put(lasColors);
colorBuffer.position(0);    

...

public void draw(GL10 gl) {
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
        gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glPointSize(0.6f);
        gl.glDrawArrays(GL10.GL_POINTS, 0, numVertices);
        gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }

1 个答案:

答案 0 :(得分:0)

我不知道它是否可以帮到你,但谷歌aubout内存管理有很多令人感兴趣的建议:http://dubroy.com/blog/google-io-memory-management-for-android-apps/