使用(StateListDrawable)vs StateListDrawable

时间:2019-04-06 15:37:45

标签: 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);
    }
}

VS

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 个答案:

答案 0 :(得分:1)

两个示例之间的CPU性能没有差异。唯一不同的是,第一个带有using模式的示例确实是在代码超出StateListDrawable范围之外时处置using受管实例。

这将使Android端摆脱分配的内存,因为它是释放资源时的托管可调用包装器。

我更喜欢使用模式,因为它在泄漏内存方面更安全。但是,就速度而言,您不会看到任何性能提升。