快速图像下载

时间:2013-05-23 01:03:40

标签: ios xamarin.ios xamarin

在我的应用中,我需要下载多张图片,图片为60kb个顶部。

我这样做的方式是:

image.Image = UIImage.LoadFromData (NSData.FromUrl (new NSUrl("http://url")));

这可行,但下载图像需要很长时间。有没有更好/更快的方式来解决这个我不知道的事情?

图像下载发生在ViewDidLoad ()方法中,导致在转到此视图控制器之前出现令人不安的长暂停。

2 个答案:

答案 0 :(得分:2)

MonoTouch.Dialog包含一个ImageLoader(秒5.3)类,用于处理图像的后台加载,并可在下载“真实”图像时分配默认图像。它可能不一定更快,但它应该对用户更敏感。

image.Image = ImageLoader.DefaultRequestImage( new Uri(uriString), this)

正如@poupou所说,第二个参数需要是对实现IImageUpdated的类的引用。

答案 1 :(得分:1)

使用相同API的快速而肮脏的方法(改编自我的一些代码)将是:

// Show a "waiting / placeholder" image until the real one is available
image.Image = ...
UIImage img = null;
// Download the images outside the main (UI) thread
ThreadPool.QueueUserWorkItem (delegate {
    UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
    using (NSUrl nsurl = new NSUrl (url))
    using (NSData data = NSData.FromUrl (nsurl)) {
        UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
        // we might not get any data, e.g. if there's no internet connection available
        if (data != null)
            img = UIImage.LoadFromData (data);
    }
    // finally call the completion action on the main thread
    NSRunLoop.Main.InvokeOnMainThread (delegate {
        // note: if `img` is null then you might want to keep the "waiting"
        // image or show a different one
        image.Image = img;
    });
});

可能有帮助的另一件事是缓存您下载的图像(例如离线模式) - 但这可能不适用于您的应用程序。

在这种情况下,您将检查缓存是否首先显示您的图像,如果没有,请确保在下载后保存它(所有这些都在后台线程中完成)。