Android的GoogleMap的内存不足。 [英] Android googlemap Out of memory
问题描述
我与GoogleMap的API的Android应用程序,并在覆盖得出一些16x16的PNG(约200计)。当我移动或放大的/在图形页面,内存不足的错误发生非常频繁。
I made an android application with googlemap api, and draw some 16x16 png (about 200 count) on overlay. When I move or zoom on/in mapview, "out of memory" error occurs very often.
我也用在我的HTC本身的GoogleMap的器件的应用。它采用14 + MB memmory,并从未发生内存不足。
I also used the googlemap appication in my htc itself. Seams that it uses about 14+MB memmory, and never happens "out of memory".
如何保存memmory使用在GoogleMap的API或如何扩大Android的API memmory限制。
How to save memmory usage in a googlemap api, or how to enlarge android api memmory limit.
非常感谢!
推荐答案
我自己的解决方案:
捕获的OutOfMemoryError时zoomin / zoomout,将prevent API由VM被杀死。
因为它通常死做地图缩放时,转换后。
My own solution: Catching OutOfMemoryError when zoomin/zoomout, will prevent api to be killed by VM. Because it dies usually when doing map zoom after a translation.
mapView.setBuiltInZoomControls(true);
ZoomButtonsController zoomctrl = mapView.getZoomButtonsController();
zoomctrl.setAutoDismissed(false);//自动隐藏关闭
zoomctrl.setVisible(true);
zoomctrl.setOnZoomListener(new ZoomButtonsController.OnZoomListener() {
public void onZoom(boolean zoomIn) {
// TODO Auto-generated method stub
try{
Log.i(TAG, "OnZoomListener");
System.gc();
if(zoomIn)
{
mc.zoomIn();
}
else
{
mc.zoomOut();
}
System.gc();
}
catch(OutOfMemoryError e)
{
e.printStackTrace();
Log.e(TAG, e.toString());
Toast.makeText(GoogleMap.this, e.toString(), Toast.LENGTH_LONG);
}
catch (Exception e)
{
Log.w(TAG, e.toString());
Toast.makeText(GoogleMap.this, e.toString(), Toast.LENGTH_LONG);
}
}
public void onVisibilityChanged(boolean visible) {
// TODO Auto-generated method stub
}
});
private boolean myDoubleTouch(float x, float y, MapView mapView)
{
Log.i(mParent.TAG, "myDoubleTouch: " + x +","+y);
try
{
mapView.getController().zoomInFixing((int)x, (int)y);
}
catch(OutOfMemoryError e)
{
System.gc();
e.printStackTrace();
Log.e(mParent.TAG, e.toString());
Toast.makeText(m_mapview.getContext(), e.toString(), Toast.LENGTH_LONG);
}
catch (Exception e)
{
Log.w(mParent.TAG, e.toString());
Toast.makeText(m_mapview.getContext(), e.toString(), Toast.LENGTH_LONG);
}
return true;
}
这篇关于Android的GoogleMap的内存不足。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!