【发布时间】:2011-03-14 18:33:21
【问题描述】:
我的应用程序在两个活动之间切换时内存不足。第一个活动正在运行 OpenGL 场景,第二个活动不是。我想确保释放 OpenGL 场景使用的所有纹理。
我现在正在使用这种方法
getNativeHeapAllocatedSize()
跟踪纹理使用的相对内存量。如果我分配纹理,这个数字会增加大约 4 兆。然而,它似乎永远不会再次下降。
在我的第一个活动“OnPause”中,我有以下代码:
SurfaceView.onPause();
mTexture = null;
然后,在第二个活动中,我多次调用 getNativeHeapAllocatedSize()。即使在 GC 运行之后,内存仍然没有下降。
编辑:
经过更多研究,它似乎与加载数据的代码有关。我已经从方程中删除了 OpenGL,内存仍然没有被释放。
try {
InputStream is = null;
{
AssetManager am = MyActivity.getAssetMgr();
is = am.open( fileName );
}
Bitmap b = BitmapFactory.decodeStream( is );
if( b != null ) {
mResX = b.getWidth();
mResY = b.getHeight();
Bitmap.Config bc = b.getConfig();
if( bc == Bitmap.Config.ARGB_8888 )
mBPP = 4;
else
mBPP = 2;
mImageData = ByteBuffer.allocateDirect( mResX * mResY * mBPP );
mImageData.order( ByteOrder.nativeOrder() );
b.copyPixelsToBuffer( mImageData );
mImageData.position( 0 );
return true;
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
编辑2:
我确实添加了你所有的想法。然而,这似乎是我的问题......
【问题讨论】: