C# Xamarin、Android、RecyclerView:平滑背景下载对象,然后设置它们

C# Xamarin、Android、RecyclerView:平滑背景下载对象,然后设置它们,c#,android,C#,Android,在我们的应用程序中,我们不断地从服务器重新加载对象,然后将它们放在RecycleView滚动视图中。现在,它确实工作得很好,但它是一个很大的滞后。喜欢-它滚动,然后停止并重新加载一秒钟,然后滚动,然后重新加载等等。我注意到其他应用程序的做法有所不同。例如,当一个人滚动浏览facebook时。你可以一直向下滚动,然后,当图像完成加载后,它们被放置在空的布局容器中。所以我认为这只能通过背景线程来实现——所以我已经这样做了,但结果就是上面提到的。它远没有facebook或任何其他可以滚动图片的应用程序

在我们的应用程序中,我们不断地从服务器重新加载对象,然后将它们放在RecycleView滚动视图中。现在,它确实工作得很好,但它是一个很大的滞后。喜欢-它滚动,然后停止并重新加载一秒钟,然后滚动,然后重新加载等等。我注意到其他应用程序的做法有所不同。例如,当一个人滚动浏览facebook时。你可以一直向下滚动,然后,当图像完成加载后,它们被放置在空的布局容器中。所以我认为这只能通过背景线程来实现——所以我已经这样做了,但结果就是上面提到的。它远没有facebook或任何其他可以滚动图片的应用程序那么流畅。这里可能有什么问题:

    private async Task LoadTHEBOOKAsync(PVH_TheBook_Singles vh, int position, int fkTaskId)
    {
        await Task.Run(() =>
        {
            //Loading on another Thread
            int taskID = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].taskID;
            int taskIDWHenTheBook = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].fullscreenID;
            Bitmap bmp = loadImage(position);
            String commentCount = KumulosHelper.Functions.Pictures.GetCountOfComments
                                    (fkTaskId.ToString()).ToString();
            String LikeCount = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].likes.ToString();
            int taskDoneId = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].taskdoneid;
            String exp = null;

            if (taskID != 0)
            {
                exp = BookOfLife.Challenges.Libary.Instance.getTask(taskID).Experience.ToString() + "ap";
            }
            else
            {
                exp = BookOfLife.Challenges.Libary.Instance.getTask(taskIDWHenTheBook).Experience.ToString() + "ap";
            }

            // Setting on UI Thread
            ((Activity)ctx).RunOnUiThread(() =>
            {
                vh.Image.SetImageBitmap(bmp);
                vh.txtComments.Text = commentCount;
                vh.txtLikeCountBlue.Text = LikeCount;
                vh.taskdoneid = taskDoneId;
                vh.txtap.Text = exp;                                   
            });
        });

    }
如您所见,所有donwloading都是在异步任务中完成的,只有放置在ui线程上完成。这是错的吗?因为我似乎找不到其他解决办法?我的意思是,我必须在UI线程上设置我的图像,对吗?所以我必须阻止它一秒钟,直到一切正常,不是吗

任何帮助都会很棒。 谢谢!:)

您可以查看xamarin内置的,您可以在那里获得更多关于新闻提要系统的信息


使用谷歌的支持库xamarin中是否存在类似的功能?