Моему приложению не хватает памяти, которая переключается между двумя действиями. Первое действие - это сцена OpenGL, второе - нет. Я хочу убедиться, что я освобождаю все текстуры, используемые сценой OpenGL.
Сейчас я использую этот метод
getNativeHeapAllocatedSize()
для отслеживания относительного объема памяти, используемого текстурами. Это число увеличивается примерно на 4 мегабайта, если я выделяю текстуры. Однако, похоже, он никогда не отступит снова.
В моих первых действиях «OnPause» у меня был следующий код:
SurfaceView.onPause();
mTexture = null;
Во втором упражнении я затем вызываю getNativeHeapAllocatedSize () несколько раз. Даже после того, как ГХ запустился, и память все еще не упала.
Edit:
После дополнительных исследований выясняется, что это что-то с кодом, который загружает данные. Я удалил 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;
}
Edit2:
Я закончил тем, что добавил все ваши идеи. Однако в моем случае это казалось проблемой ...
ByteBuffer не освобождает память