Android googlemap Недостаточно памяти - PullRequest
2 голосов
/ 17 мая 2010

Я сделал приложение для Android с googlemap api и нарисовал наложение размером 16x16 png (около 200 штук). При перемещении или увеличении / увеличении масштаба карты очень часто возникает ошибка «Недостаточно памяти».

Я также использовал приложение googlemap в моем htc. Похоже, что он использует около 14 МБ памяти и никогда не происходит «нехватка памяти».

Как сохранить использование памяти в API Googlemap или как увеличить предел памяти Android API.

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Мое собственное решение: Перехват OutOfMemoryError при zoomin / zoomout предотвратит уничтожение api виртуальной машиной. Потому что он обычно умирает при увеличении карты после перевода.

    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;
}
0 голосов
/ 15 ноября 2011
public class CustomMapView extends MapView {
    // private Context context;
    public CustomMapView(Context context, String apiKey) {

    super(context, apiKey);
    // this.context = context;
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    try {
        return super.dispatchTouchEvent(ev);

    } catch (Exception ex) {

            //     Log.e("CustomMapView", "Caught the exception");
        int zoomLevel = getZoomLevel();
        getController().setZoom(zoomLevel-1);
        super.setVisibility(View.GONE);
        super.setVisibility(View.VISIBLE);
    }

    return true;
}

@Override
public void draw(Canvas canvas) {
    try {
        super.draw(canvas);
    } catch (Exception e) {

             //     Log.e("CustomMapView", "Caught the exception");
        int zoomLevel = getZoomLevel();
        getController().setZoom(zoomLevel-1);
        super.setVisibility(View.GONE);
        super.setVisibility(View.VISIBLE);
    }
}

public CustomMapView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // this.context = context;
}

public CustomMapView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // this.context = context;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    System.gc();
    return super.onTouchEvent(ev);
}

}

Наряду с onZoomListener я добавил свой собственный CustomMapView, который расширяет MapView. Это решило исключение памяти в моем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...