1

我正在使用 UIL 库编写自定义画廊并测试性能,我已修改ImagePagerActivity(示例代码)以从 sdcard 加载图像。一切正常,但加载速度太慢,有时甚至需要 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

安卓版本:4.0.3

其他与示例代码相同

4

1 回答 1

0

您的 ImageLoaderConfiguration 是什么样的?你设置什么线程优先级?此外,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 回答