OutOfMemoryException在Map |上添加标记列表时Xamarin | Android的

时间:2015-10-22 19:59:15

标签: android google-maps xamarin out-of-memory google-maps-markers

我正在使用Android Map API v2处理移动应用程序。这个应用程序具有全球天气信息,并具有许多与土地天气参数相关的功能例如 风,云,雨,压力,温度,波浪,膨胀。

正如我所说;应用程序具有天气参数,因此要使用Markers在地图上显示这些参数,这似乎适用于每个参数;我在地图上为Marker添加的每个参数都设置了一组图标。

我的问题是,我在地图上绘制了多个参数时获得OutOfMemoryException。我了解Bitmap及其处理方式,但在地图上绘制大量数据时,仍然难以找到删除此OutOfMemoryException的最佳方法。

Markers还有一件事正在发生,那就是我缩放地图图标时变小了。

这就是我在地图上绘制图标/标记所做的事情:

    void CloudPlot()
    {
        var tempMarkers = new List<Marker>();
        int cloudItemCount = 0, i = 0;
        var data = GribReader.Instance.WeatherRequest.CloudRequest;
        cloudItemCount = data.Count;

        while (cloudItemCount > 0)
        {
            var cloudData = data[i];

            Bitmap cloudBitmap = RotateBitmap(-1, GetCloudIcon(cloudData.ValueData));
            Activity.RunOnUiThread(() =>
            {
                var cloudMarker = mwGoogleMap.AddMarker(new MarkerOptions()
                                            .SetPosition(new LatLng(cloudData.Latitude + 0.3, cloudData.Longitude + 0.4))
                                            .SetIcon(BitmapDescriptorFactory.FromBitmap(cloudBitmap))); //Cloud icon
                tempMarkers.Add(cloudMarker);
            });

            i++;
            cloudItemCount--;
            if (cloudItemCount == 0)
            {
                i = 0;
                ProgressCount--;
                //Interlocked.Decrement(ref _progressCount);
                if (VisibleParametrs.ContainsKey(MWParameters.CloudCover))
                    VisibleParametrs.Remove(MWParameters.CloudCover);

                VisibleParametrs.Add(MWParameters.CloudCover, tempMarkers);
            }
        }
        if (cloudItemCount == 0)
            ProgressCount--;
    }

关注旋转位图并缩小尺寸:

    public Bitmap RotateBitmap(float angle, int windIcon)
    {
        Matrix matrix = new Matrix();
        if (angle > -1)
            matrix.PostRotate(angle);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.InSampleSize = 2;
        Bitmap source = BitmapFactory.DecodeResource(Resources, windIcon, options);
        return Bitmap.CreateBitmap(source, 0, 0, source.Width, source.Height, matrix, true);
    }

我在地图上绘制云和风图标后得到以下结果(无缩放):

我们是否有最佳方法可以删除 OutOfMemoryException

也;我们可以做些什么来在缩放地图时使标记图标变大?

1 个答案:

答案 0 :(得分:0)

CloudPlot 功能中,您确定要降低 cloudItemCount 变量的值吗? Becasue我在你发布的代码中没有看到。如果没有那么它将是一个无限循环并导致 OutOfMemoryException