2013-07-26 3 views
1

J'écris une galerie personnalisée en utilisant la bibliothèque UIL et pour tester les performances, j'ai modifié ImagePagerActivity (par exemple du code) pour charger des images depuis la carte SD. Tout fonctionne bien mais le chargement est trop lent, parfois il faut même 5 secondes pour charger une seule image. Cependant si j'utilise la galerie intégrée, son chemin est plus rapide et charge plus d'images en millisecondes. Voici l'extrait de modification onCreateChargeur d'images universel charges plus lent

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); 

et peu modifiée 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(); 
      } 

dimension d'image Habituellement commune est 2592x1552

UIL 1.8.6

version Android: 4.0.3

D'autres sont exactement les mêmes que l'exemple de code

+0

Essayez de désactiver la mise en cache sur le disque. – NOSTRA

+0

fait, même résultat :) – xmen

Répondre

0

À quoi ressemble votre ImageLoaderConfiguration? Quel filPriority le définissez-vous? En outre, ImageScaleType.EXACTLY crée un autre bitmap afin que cela ajoute du temps de chargement. Pour ma ImageLoaderConfiguration je ThreadPriorité mis à Thread.MAX_PRIORITY et threadPoolSize réglé sur 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 est à l'intérieur du code de la question. Et j'ai essayé d'utiliser votre config avec 20 Mo de mémoire cache et son bit meilleur. Mais prend encore comme 3 secondes. – xmen

+0

Avez-vous essayé de définir le threadPriority à être plus élevé? –

+0

Pouvez-vous réduire les images et les placer dans les dossiers de ressources appropriés? –

Questions connexes