2013-07-26 2 views
1

Я пишу пользовательскую галерею, используя библиотеку UIL, и для проверки производительности я модифицировал ImagePagerActivity (пример кода) для загрузки изображений с SD-карты. Все работает нормально, но загрузка слишком медленная, иногда даже занимает 5 секунд, чтобы загрузить одно изображение. Однако, если я использую встроенную галерею, ее способ быстрее и загружает больше изображений в миллисекундах. Вот фрагмент модифицированного OnCreateУниверсальный загрузчик изображений загружается медленнее

File file = new File(Environment.getExternalStorageDirectory(), "dcim/100MEDIA/"); 
    File[] images = file.listFiles(new FilenameFilter() { 
     @Override 
     public boolean accept(File dir, String filename) { 
      return filename.toLowerCase(Locale.US).endsWith(".jpg"); 
     } 
    }); 
    String[] imageUrls = new String[images.length]; 
    for (int a = 0; a < imageUrls.length; a++) 
     imageUrls[a] = "file://" + images[a].getAbsolutePath(); 

    options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.ic_empty) 
      .showImageOnFail(R.drawable.ic_error).resetViewBeforeLoading(true).cacheOnDisc(true) 
      .cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565) 
      .displayer(new FadeInBitmapDisplayer(300)).build(); 
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) 
      .defaultDisplayImageOptions(options).discCacheExtraOptions(800, 800, CompressFormat.PNG, 0, null) 
      .build(); 
    ImageLoader.getInstance().init(config); 

и немного модифицированный ImagePagerAdapter

  @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
       spinner.setVisibility(View.GONE); 
       Toast.makeText(ImagePagerActivity.this, loadedImage.getWidth() + " x " + loadedImage.getHeight(), 
       Toast.LENGTH_SHORT).show(); 
      } 

Обычно общий размер изображения 2592x1552

УИЛ 1.8.6

Android версия: 4.0.3

Другие такие же, как пример кода

+0

Попробуйте отключить кэширование на диске. – NOSTRA

+0

сделал, такой же результат :) – xmen

ответ

0

Как выглядит ваша ImageLoaderConfiguration? Какую настройку threadPriority вы установили? Кроме того, ImageScaleType.EXACTLY создает другое растровое изображение, поэтому это добавит время загрузки. Для моего ImageLoaderConfiguration меня threadPriority установлен Thread.MAX_PRIORITY и threadPoolSize значение 5:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      getApplicationContext()).threadPriority(Thread.MAX_PRIORITY) 
      .memoryCacheSize(memoryCacheSize) 
      .memoryCache(new WeakMemoryCache()) 
      .denyCacheImageMultipleSizesInMemory().threadPoolSize(5) 
      .discCacheFileNameGenerator(new MyFileNameGenerator()) 
      .tasksProcessingOrder(QueueProcessingType.LIFO)// .enableLogging() 
      .build(); 
+0

ImageLoaderConfiguration - внутри код вопроса. И я попытался использовать ваш конфиг с размером кэша памяти 20 МБ и его бит лучше. Но все равно занимает 3 секунды. – xmen

+0

Вы пытались установить, чтобы threadPriority был выше? –

+0

Можете ли вы масштабировать изображения и помещать их в соответствующие папки ресурсов? –

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