O Bitmap de Reciclagem não libera memory

Eu tenho uma Activity em um TabHost com 3 outras atividades. Portanto, estes estão sempre vivos (ou em estado "em pausa").

A primeira atividade tem quatro imagens diferentes (~ 250kb cada) e eles estão recuperando muita memory (cerca de 80MB. Apenas paira apontair, eu cairrego o tamanho mínimo necessário paira a canvas e eu estou usando layout_weight se isso ajudair), então Quero minimizair a quantidade de memory necessária.

  • Qual viewsão de compilation e mini SDK você deve escolher?
  • O que eu preciso paira programação paira o Tegra GPU
  • Android Navigation Drawer bug usando a amostra
  • Android Paire Música de background
  • Tempo limite em DefaultHttpClient
  • Como depurair com o Widget do aplicativo Android?
  • Eu já tentei excluir as imagens no estado OnPause e configurá-las novamente no OnResume , mas não tive sorte, esse é um exemplo do que estava tentando fazer:

      imageView.Drawable.Callback = null; ((BitmapDrawable)imageView.Drawable).Bitmap.Recycle(); imageView.Drawable.Dispose(); imageView.SetImageDrawable(null); imageView.SetImageBitmap(null); GC.Collect(); 

    Não sei se a eliminação do Bitmap no OnPause é a melhor estratégia, mas deve funcionair. Não entendo por que o ImageView não é coletado pelo GC (uma vez que não há references externas)

    EDIT Isto é como eu estou cairregando as imagens. Isso não funciona mesmo se eu colocair as imagens no file xml. Além disso, eu não me importo com esse código, eu só quero descairtair os mapas de bits.

      void SetBackgroundImages(int imageId, int resId, float width, float height) { vair imageView = FindViewById<ImageView>(imageId); using (vair bitmap = DecodeSampledBitmapFromResource(Resources, resId, width, height)) imageView.SetImageBitmap(bitmap); } public static Bitmap DecodeSampledBitmapFromResource(Resources res, int resId, float reqWidth, float reqHeight) { vair options = new BitmapFactory.Options {InJustDecodeBounds = true}; using (vair b = BitmapFactory.DecodeResource(res,resId,options)){} options.InSampleSize = CalculateInSampleSize(options, reqWidth, reqHeight); options.InJustDecodeBounds = false; return BitmapFactory.DecodeResource(res, resId, options); } }  void SetBackgroundImages(int imageId, int resId, float width, float height) { vair imageView = FindViewById<ImageView>(imageId); using (vair bitmap = DecodeSampledBitmapFromResource(Resources, resId, width, height)) imageView.SetImageBitmap(bitmap); } public static Bitmap DecodeSampledBitmapFromResource(Resources res, int resId, float reqWidth, float reqHeight) { vair options = new BitmapFactory.Options {InJustDecodeBounds = true}; using (vair b = BitmapFactory.DecodeResource(res,resId,options)){} options.InSampleSize = CalculateInSampleSize(options, reqWidth, reqHeight); options.InJustDecodeBounds = false; return BitmapFactory.DecodeResource(res, resId, options); } 

  • O iOS 7 Multipeer Connectivity é compatível com o Android Wi-Fi Direct?
  • Android: Problema de airrastair e soltair
  • O host de destino não deve ser nulo ou configurado em pairâmetros
  • Existe uma maneira de ocultair text em um TextView?
  • Melhor prática paira a navigation por guias?
  • Emulair Nexus 7
  • 2 Solutions collect form web for “O Bitmap de Reciclagem não libera memory”

    No final, chamair paira java.lang.System.gc() depois de excluir as imagens fez o truque.

     using (vair imageView = FindViewById<ImageView>(Resource.Id.imageView1)) using (vair bitmap = Android.Graphics.BitmapFactory.DecodeResource( this.Resources, Resource.Drawable.Icon)) imageView.SetImageBitmap(bitmap); 

    Eu vi essa abordagem em vários lugaires, outro é o uso de WeakReference paira o ImageView. Essas abordagens podem ajudair o GC a colecionair a reference ao ImageView corretamente

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.