1

私は UIL ライブラリを使用してカスタム ギャラリーを作成しており、パフォーマンスをテストするために、ImagePagerActivitysdcard から画像を読み込むように (サンプル コードを) 変更しました。すべて正常に動作しますが、読み込みが遅すぎます。1 つの画像を読み込むのに 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 です

UIL 1.8.6

アンドロイドのバージョン: 4.0.3

その他はサンプルコードと同じです

4

1 に答える 1

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();
于 2013-07-26T03:02:48.443 に答える