В настоящее время я использую Xamarin. для разработки моего приложения Android проблема, с которой я столкнулась, - это когда я загружаю кучу изображений, она занимает большую часть моей памяти стека и не сбрасывается должным образом. Поэтому, если приложение запускается в Activity A, и вы переходите на Activity B (загружает его изображения), я возвращаюсь к Activity A и возвращаюсь обратно в B, он падает (из памяти). Я загрузил демонстрационное приложение, демонстрирующее проблему, которую я испытываю.Получение утечек памяти при загрузке изображений с URl Android
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;
}
он также содержит Telerik DLL файлы.
Я добавил код –
Я бы просто использовал UrlImageViewHelper, чтобы обрабатывать все это для вас: https://components.xamarin.com/view/urlimageviewhelper Это потрясающая библиотека. Или посмотрите на picasso: https://components.xamarin.com/view/square.picasso – JamesMontemagno