2016-07-14 2 views
2

В моем приложении я повторяю AysnceTask, который загружает изображения из моего ковша AWS, но они требуют немного загрузки (обычно 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; 

    } 
} 

Использование различных услуг (например, АМС), GitHub или другую библиотеку, чтобы ускорить загрузку возможно!

+1

использование Picasso -> http://square.github.io/picasso/ у него есть опции кеширования и загрузка фона в представления. Кроме того, ваши скорости загрузки будут зависеть от вашей сети, но picasso будет выполнять параллельные загрузки для вас. –

+0

поставил это как ответ, чтобы я мог дать вам преимущество, я использовал Glide, но в итоге оказался с Picasso, поэтому вы заслуживаете, по крайней мере, upvote! –

ответ

2

Использование Picasso - Ее легко использовать библиотеку

Шаг 1: Добавьте зависимость в Gradle

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

Step 2: Использование в деятельности

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

Пикассо обрабатывает весь тяжелый подъем в фоновом режиме. Он также кэширует изображения для более быстрого извлечения изображений в будущем. Кроме того, Picasso выполняет параллельные загрузки по умолчанию.

+0

@ Lazar K рад, что я мог бы помочь! –

+0

Как и Glide, Пикассо работает еще лучше. Спасибо! –

0

Если вы хотите загрузить изображения быстрее и эффективнее, тогда есть несколько способов подключения файлов (слишком много накладных расходов для небольших файлов).

Однако основным узким местом является пропускная способность интернет-пользователей. Я предполагаю, что ваша текущая реализация загружает эти изображения при каждом открытии приложения. Это неэффективно. Что вы можете сделать, так это кэширование изображений и проверка обновлений.

Например, когда вы открываете приложение:

  • Загрузите кэшируются images` (если она свежая установки, то необходимо также кэшированные изображения в вашем пакете приложения)
  • проверка для обновления образа на заднем плане
  • Если есть обновление, загрузите их
  • Когда вы закончите загрузку, обновите кеш и при необходимости замените загруженные изображения.
2

Попробуйте Glide библиотека, рекомендованная google.

У него больше возможностей по сравнению с библиотекой Пикассо.

Добавить эту зависимость в вашем Gradle

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

Загрузите изображение, используя следующий код

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

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

+1

не только загружает изображения в 200 раз быстрее, но отлично работает с моим приложением! 1+ <3 –

+0

@ LazarK В пикассо любое преимущество, чем Glide ?? –

+0

Для меня цвет фона моего приложения был чисто белым, и когда я использовал Glide, он добавил небольшой серый фон к представлению изображения, из-за которого он выглядел уродливо. Плюс с Picasso, если я обновил файл на S3-сервере, он будет обновляться по телефону, в отличие от Glide! –

0
  1. Использование многопоточных загрузки: Вы можете запустить AsyncTask в параллельно с myTask.execute(AsyncTask.THREAD_POOL_EXECUTOR). Это позволяет загружать файлы в одно и то же время.

  2. Сделать доставку содержимого сервера быстрее: добавить облачную карту Amazon (CDN) перед S3. Это ускоряет загрузку для пользователей.

  3. Первый поток, загружающий файлы в кеш диска, затем декодирует в растровые изображения только требуемого разрешения. Это экономит много оперативной памяти, если вам не нужно показывать изображения в полном размере. Поскольку изображения кэшируются, повторные запросы для одного и того же изображения не будут использовать сетевые ресурсы.

Для # 1 и # 3, просто используйте Fresco

+0

Как будет загружаться исходный файл, сохраняющий пропускную способность сети? – EJP

Смежные вопросы