protected override void Dispose(bool disposing) { lock (this) { // Detach objects if (_baseMapViewRenderer != null) { _baseMapViewRenderer.Detach(); } if (_redrawRequestListener != null) { _redrawRequestListener.Detach(); } if (_baseMapView != null) { _baseMapView.SetRedrawRequestListener(null); } // Dispose objects if (_configChooser != null) { _configChooser.Dispose(); _configChooser = null; } if (_baseMapViewRenderer != null) { _baseMapViewRenderer.Dispose(); // allow the Java object to be collected later _baseMapViewRenderer = null; } if (_baseMapView != null) { _baseMapView.Dispose(); _baseMapView = null; } if (_redrawRequestListener != null) { _redrawRequestListener.Dispose(); _redrawRequestListener = null; } } base.Dispose(disposing); }
/// <summary> /// Constructs a new MapView object from a context object and attributes. /// </summary> /// <param name="context">The context object.</param> /// <param name="attrs">The attributes.</param> public MapView(Context context, IAttributeSet attrs) : base(context, attrs) { // Connect context info and assets manager to native part AndroidUtils.SetContext (context); if (_assetManager == null) { Carto.Utils.Log.Warn("MapView: MapView created before MapView.RegisterLicense is called"); _assetManager = context.ApplicationContext.Assets; AssetUtils.SetAssetManagerPointer(_assetManager); } // Create base map view, attach redraw listener _baseMapView = new BaseMapView(); _baseMapView.GetOptions().DPI = (int)Resources.DisplayMetrics.DensityDpi; _redrawRequestListener = new MapRedrawRequestListener(this); _baseMapView.SetRedrawRequestListener(_redrawRequestListener); // Create base map renderer and EGL configuration chooser _baseMapViewRenderer = new BaseMapViewRenderer(_baseMapView); _configChooser = new ConfigChooser(); try { System.Reflection.PropertyInfo prop = typeof(GLSurfaceView).GetProperty("PreserveEGLContextOnPause"); prop.SetValue(this, true); } catch (System.Exception) { Carto.Utils.Log.Info("MapView: Preserving EGL context on pause is not possible"); } SetEGLContextClientVersion(2); SetEGLConfigChooser(_configChooser); SetRenderer(_baseMapViewRenderer); RenderMode = Rendermode.WhenDirty; }