Cómo obtener fugas de memoria al cargar imágenes de URl Android

Actualmente estoy usando Xamarin. para desarrollar mi aplicación Android el problema que tengo es cuando carga un montón de imágenes que se necesita un gran pedazo de mi memoria de la pila y no se restablece correctamente. Así que si la aplicación comienza en la Actividad A y va a la Actividad B (carga las imágenes) vuelvo a la Actividad A y regreso a B se bloquea (problema de memoria). He subido una aplicación de demostración que demuestra el problema que estoy experimentando.

namespace imageLoader { [Activity (Label = "LoadImages")] public class LoadImages : Activity { Bitmap image; List<PromotionClass> pro; PromotionAdapter proAdapter; RadListView radlist; protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); SetContentView (Resource.Layout.LoadImages); LinearLayout line = (LinearLayout)FindViewById (Resource.Id.lin); radlist = new RadListView (this); GridLayoutManager gridLayoutManager = new GridLayoutManager(this,1, LinearLayoutManager.Horizontal, false); radlist.SetLayoutManager (gridLayoutManager); pro = new List<PromotionClass>(); ArrayList a = new ArrayList (); a.Add ("http://apk.payment24.co.za/promotions/nov/Zappar.jpg"); a.Add ("http://apk.payment24.co.za/promotions/nov/Valpre.jpg"); a.Add ("http://apk.payment24.co.za/promotions/nov/Tropika.jpg"); int dent = (int)Resources.DisplayMetrics.Density; foreach (var url in a) { image = GlobalMethods.GetImageBitmapFromUrl(url.ToString(),dent); pro.Add(new PromotionClass("","",image)); } proAdapter = new PromotionAdapter (pro, this); radlist.SetAdapter (proAdapter); line.AddView (radlist); // Create your application here } public override void OnBackPressed () { SetContentView (Resource.Layout.Main); Intent intent = new Intent (this, typeof(LoadImages)); intent.AddFlags (ActivityFlags.NewTask); intent.AddFlags (ActivityFlags.ClearTask); intent.AddFlags (ActivityFlags.NoAnimation); StartActivity (intent); this.Finish (); } } 

}

 public static Bitmap GetImageBitmapFromUrl(string url,int dens) { Bitmap bitmapScaled = null; using (var webClient = new WebClient()) { var imageBytes = webClient.DownloadData(url); if (imageBytes != null && imageBytes.Length > 0) { // Create an image from the Byte Array Bitmap imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length); bitmapScaled = Bitmap.CreateScaledBitmap(imageBitmap, imageBitmap.Height * dens, imageBitmap.Width * dens, true); imageBitmap.Recycle(); } } // Return the new Scaled image return bitmapScaled; } 

Google Drive

también contiene archivos dll telerik.

De mirar los fragmentos de código que pegó aquí, otra cuestión podría ser que el "List ()" cada uno mantener una referencia a la "escala" de imagen – pero estos nunca parecen ser liberados / reciclado.

¿Has intentado hacer esencialmente PromotionClass desechable? A continuación, dentro del "OnDestroy ()" método de la actividad de Android, puede Dispose la "PromotionClass" 's que a su vez puede reciclar / disponer de las imágenes a escala reducida.

Almacenar mapa de bits cargado en caché, por lo que no es necesario volver a cargar el mapa de bits.
Consulte https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

  • Xamarin con la identidad de asp.net 2.0
  • Xamarin cerrar Aplicación de Android en el botón Atrás
  • Cómo zipalign el archivo apk en Windows
  • Target Platform está deshabilitado en Xamarin Studio?
  • Cómo actualizar Xamarin para Android en Visual Studio Community 2015
  • Problemas al implementar la versión de la aplicación Xamarin.Android
  • ¿Cómo obtengo la dirección MAC y el dispositivo Android con 6.0 o superior en c #?
  • ¿Cómo puedo eliminar los idiomas no utilizados del archivo APK final con Xamarin.Android?
  • Cómo implementar CountDownTimer Clase en Xamarin C # Android?
  • La tarea "GenerateJavaStubs" falló inesperadamente
  • Fondo circular de ProgressBar: Android Xamarin
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.