ListView
довольно старый (Android 1.0). Он был плотно соединен и не был построен с учетом производительности. Для их удержания потребовалось много хаков. RecyclerView
заполняет этот пробел.
https://www.youtube.com/watch?v=LqBlYJTfLP4
Что касается, когда вы должны позвонить Dispose()
, RecyclerView
должен обрабатывать эту базовую функциональность с помощью LayoutManager
. На ViewHolder
стороны, вы можете следовать основной Dispose
схемы:
protected override void Dispose (bool disposing)
{
base.Dispose (disposing);
if(ItemView != null)
{
ItemView.Click -= HandleClick;
}
_listener = null; //Listener might just be a simple Action<int> like in this example: https://github.com/xamarin/monodroid-samples/blob/master/android5.0/RecyclerViewer/RecyclerViewer/MainActivity.cs#L111
}
В которой вы только заботиться о Располагая базы и любые обработчик событий, настроенные. Однако, если ваш RecyclerView
использует немного изображений в View
, он раздувается, вы захотите обеспечить правильное управление этими ресурсами, поскольку Android GC не сможет собирать эти элементы, поскольку на них будет ссылаться GC GC Xamarin.Android (И они будет небольшая ссылка, например, на несколько байтов). Каким-то образом вам нужно разорвать связь между двумя GC, чтобы она могла иметь право на сбор. Вы можете прочитать больше о GC Алгоритм здесь: Xamarin Android garbage collection algorithm и причина здесь: https://developer.xamarin.com/guides/cross-platform/deployment,_testing,_and_metrics/memory_perf_best_practices/#Use_Weak_References_to_Prevent_Immortal_Objects
Чтобы сделать это, мы можем разорвать отношения через пару способов:
MyObject = null;
MyObject.Dispose();
В любом случае следует отметить эти элементы, подходящие для GC. В случае Drawable
вы также можете установить соответствующий ImageView
или объект, который Drawable
устанавливается в null
, например SetBackgroundDrawable
/etc.
TLDR; Используйте RecyclerView
и не забудьте правильно управлять любыми Bitmap/Drawable
ресурсами.
Есть ли причина, по которой вы отнесены к 'ListView'? Пожалуйста, рассмотрите возможность использования https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html – CzarMatt
Реальная Recyclerview требует более новой версии для Android, если я предпочитаю использовать ее без (поддержки) библиотек или других дополнительных dependecies. – Daan