在我们的应用程序中,我们不断从服务器重新加载对象,然后将它们放在recyclerview scrollview中。现在,它确实工作正常,但它是一个很大的滞后。喜欢 - 它滚动,然后停止并重新加载一秒钟,然后滚动,然后重新加载,依此类推。我注意到其他应用程序的做法不同。例如,当一个人滚动浏览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;
});
});
}
正如您所看到的,所有的下载都是在异步任务中完成的,只有放置是在ui线程上完成的。这是错的吗?因为我似乎无法找到任何其他解决方案吗?我的意思是,我必须在UI线程上设置我的图像,对吗?所以我必须阻止它一秒钟直到一切正常,不是吗?
任何帮助都会很棒。 谢谢! :)