更快,更有效地下载图像

时间:2016-07-14 02:53:11

标签: android amazon-web-services amazon-s3

在我的应用程序中,我重复一个从我的AWS桶下载图像的AysnceTask,但它们需要一点点下载(通常为1/2秒),当我下载10个图像时,它会增加并使用户体验变得更糟。

我的问题是:是否有更快的方式从AWS S3下载图像?

Android代码:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

    protected Bitmap doInBackground(String... urls) {

        String PhotoURL = "https://s3.amazonaws.com/bucket/Images/" + productForImages;
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(PhotoURL).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }

        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {

        productColumn = 5;
        productImages[productRow][productColumn] = result;

  }
}

使用不同的服务(如AWS),GitHub或其他库可以加快下载速度!

4 个答案:

答案 0 :(得分:3)

尝试使用谷歌推荐的 Glide 库。

与毕加索图书馆相比,它具有更多功能。

在gradle中添加此依赖项

compile 'com.github.bumptech.glide:glide:3.5.2'

使用以下代码加载图片

Glide.with(context)
.load("//inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(yourImageView);

参考 - https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

答案 1 :(得分:2)

使用Picasso - 它是一个易于使用的库

第1步:在gradle中添加依赖

uninstaller.exe

第2步:在活动中使用

compile 'com.squareup.picasso:picasso:2.5.2'

毕加索处理背景中的所有繁重工作。它还可以缓存图像,以便将来更快地检索图像。此外,Picasso默认会进行并行下载。

答案 2 :(得分:0)

如果您想更快更有效地下载图像,那么有多种方法可以下载文件(虽然小文件的开销太大)。

然而,主要的瓶颈是用户&#39;互联网带宽。我猜你当前的实现是每次打开你的应用程序时下载这些图像。这效率不高。您可以做的是缓存图像并检查更新。

例如,当您打开应用时:

  • 加载缓存的图像`(如果是全新安装,那么应用程序包中也应该有缓存的图像)
  • 检查背景图像更新
  • 如果有更新,请下载
  • 完成下载后,请更新缓存并在需要时替换已加载的图像。

答案 3 :(得分:0)

  1. 使用多线程下载:您可以使Asynctask与myTask.execute(AsyncTask.THREAD_POOL_EXECUTOR)并行运行。这样可以同时进行更多下载。

  2. 加快服务器内容交付:在S3前添加Amazon Cloudfront(CDN)。这可以加快用户的下载速度。

  3. 首先将文件流下载到磁盘缓存,然后解码为只需要的分辨率的位图。如果您不需要以全尺寸显示图像,这可以节省大量RAM。由于图像是缓存的,因此对同一图像的重复请求将不会使用网络资源。

  4. 对于#1和#3,只需使用Fresco

    即可