在我的应用程序中,我重复一个从我的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或其他库可以加快下载速度!
答案 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)
使用多线程下载:您可以使Asynctask与myTask.execute(AsyncTask.THREAD_POOL_EXECUTOR)
并行运行。这样可以同时进行更多下载。
加快服务器内容交付:在S3前添加Amazon Cloudfront(CDN)。这可以加快用户的下载速度。
首先将文件流下载到磁盘缓存,然后解码为只需要的分辨率的位图。如果您不需要以全尺寸显示图像,这可以节省大量RAM。由于图像是缓存的,因此对同一图像的重复请求将不会使用网络资源。
对于#1和#3,只需使用Fresco
即可