imageviews 列表的内存效率是多少

问题描述

我正在尝试在 xamarin.android 中制作一个 imagevideoslider,我遇到了一些运行时视图删除和更新问题,例如 findviewwithtag 返回 null 而不是视图没有被正确删除,因为在搜索互联网后我从答案中得到了这个想法此线程列出所有视图

dynamically add and remove view to viewpager

现在假设我有 1000 个图像视图或视频视图或混合的列表/可观察集合。这种方法的内存效率是多少?这是一种不好的做法吗?

例如 我有一个 java.lang.object 的列表

 private ObservableCollection<Java.Lang.Object> _views = new ObservableCollection<Java.Lang.Object>();

每次在列表中添加新的动态项时都会调用此代码

        View view = new View(_context);
        if (con.MediaType.ToLower().Contains(Common.TYPE_IMAGE)) 
         //MediaType.Image
        {
            view = new ImageView(_context);

            ((Activity)_context).RunOnUiThread(() =>
            {
                SetScaleType(ref view,con.ScaleType);
                try
                {
                    //implement ifileprovider
                    ((ImageView)view).SetImageURI(Uri.Parse(con.LocalPath));
                }
                catch (Exception ex)
                {
                }
            });
        }
        _views.add(view);

实例化项目方法

    public override Object InstantiateItem(ViewGroup container,int position)
    {
        try
        {
            ((Activity)_context).RunOnUiThread(() =>
            {
                container.AddView((View)_views[position],0);
                if (position == 0)
                {
                    OnPageSelected(0);
                }
            });
        }
        catch (Exception ex)
        {

        }
        return _views[position];
    }

销毁物品方法

    public override void DestroyItem(ViewGroup container,int position,Object @object)
    {
        try
        {
            ((Activity)_context).RunOnUiThread(() =>
            {
                View view = (View)@object;
                ((ViewPager)container).RemoveView(view);
                view = null;
                GC.Collect(GC.MaxGeneration,GCCollectionMode.Forced);
            });
        }
        catch (Exception ex)
        {
        }
    }

又来了!在代码中保留所有视图的列表然后从该列表中引用视图是一种不好的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)