#android #xamarin
#Android #xamarin
Вопрос:
Мне нужно динамически указывать цвет фона и нажатый цвет в каждой строке. Какой из двух является лучшим подходом? И какой из двух имеет лучшую производительность?
public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
{
var holder = viewHolder as adpCategoryPreviewViewHolder;
using (StateListDrawable states = new StateListDrawable())
{
if (position % 2 == 0)
{
states.AddState(new int[] { Android.Resource.Attribute.StatePressed }, new ColorDrawable(Color.ParseColor("#ffc27c")));
states.AddState(new int[] { }, new ColorDrawable(Color.ParseColor("#FFFFFF")));
}
else
{
states.AddState(new int[] { Android.Resource.Attribute.StatePressed }, new ColorDrawable(Color.ParseColor("#ffc27c")));
states.AddState(new int[] { }, new ColorDrawable(Color.ParseColor("#bfddff")));
}
holder.layout.Background = (states);
}
}
##ПРОТИВ
StateListDrawable states = new StateListDrawable();
if (position % 2 == 0)
{
states.AddState(new int[] { Android.Resource.Attribute.StatePressed }, new ColorDrawable(Color.ParseColor("#ffc27c")));
states.AddState(new int[] { }, new ColorDrawable(Color.ParseColor("#FFFFFF")));
}
else
{
states.AddState(new int[] { Android.Resource.Attribute.StatePressed }, new ColorDrawable(Color.ParseColor("#ffc27c")));
states.AddState(new int[] { }, new ColorDrawable(Color.ParseColor("#bfddff")));
}
holder.layout.Background = (states);
Ответ №1:
Производительность процессора в двух примерах не отличается. Единственное, что отличается, это то, что первый пример с использованием шаблона выполняет, это удаление StateListDrawable
управляемого экземпляра, когда код выходит за рамки using
.
Это позволит стороне Android избавиться от выделенной памяти, поскольку это управляемая вызываемая оболочка, когда она освобождает ресурсы.
Я бы предпочел шаблон using, поскольку он более безопасен с точки зрения утечки памяти. Однако вы не увидите никакого увеличения производительности с точки зрения скорости.