如何在 Android 中使位图加载更快?

Posted

技术标签:

【中文标题】如何在 Android 中使位图加载更快?【英文标题】:How to make bitmap loading faster in Android? 【发布时间】:2021-08-29 03:00:21 【问题描述】:

我有一个代码可以加载图像的缩略图并将其提供给滑行。然后滑翔将加载到支架中。但是,当我加载缩略图时,它会返回一个位图。所以,我将位图传递给滑行。但是,初始加载需要将近 30 秒。我的意思是在画廊里有很多照片。因此,当画廊打开时,它根本不会显示 30 秒的图像。然后它会显示位图。

另一方面,如果我使用 URI 来馈送滑行,它会立即加载它。但是,图像正在回收站视图中加载。因此,当时只会加载一些图像。

加载一些图像后。当我们向上滑动并查看其他照片的加载速度时,显然位图馈送图像的加载速度比 URI 馈送图像更快。但是,位图需要 30 秒的初始加载时间。

有什么方法可以让这个位图加载更快?

...
while (cursor.moveToNext()) 
                Log.d("FetchImages(): ", " Started");
                Bitmap thumbBitmap = null;

                int _thumpId = cursor.getInt(column_index_data);
                Uri uri1 = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, _thumpId);

                Size thumbSize = new Size(150, 150);
                try 
                    thumbBitmap = getApplicationContext().getContentResolver().loadThumbnail(uri1, thumbSize, null);
                 catch (IOException e) e.printStackTrace();

                ImageModel ImageModel = new ImageModel();
                ImageModel.setBitmap(thumbBitmap);
                arrayList.add(ImageModel);
            
            Log.d("FetchImages(): ", " Ended");
            runOnUiThread(() -> 
                Adapter Adapter = new Adapter(getApplicationContext(), arrayList, MainActivity.this);
                recyclerView.setAdapter(Adapter);
                cursor.close();
                Log.d("FetchImages(): ", " RecyclerView Adapter attached");
            );
...

【问题讨论】:

【参考方案1】:

Glide .with(context) .load(url).apply(new RequestOptions().override(150, 150)) //for resizing .into(imageView);

不需要创建位图它需要更多的计算。 Glide 更快更高效。 如果你想使用位图,那么使用 AsycTask 这样它就不会阻塞主线程并且程序不会挂起。

【讨论】:

没有冻结。它只是没有加载到 recyclerview 大约 30 秒。那时的 UI 是完全流畅且反应灵敏的。我正在尝试获取位图,因为不推荐使用 MediaStore.Images.Thumbnails.DATA。因此,要生成缩略图,我们必须使用loadThumbnails() 方法。返回Bitmap。而且AsyncTask() 也被弃用了。所以,位图加载是必要的。 您不需要使用上面的代码加载缩略图,您将生成精确大小的缩略图 150×150。 对于位图,请尝试将 android:largeHeap=true 添加到清单中,以便您有内存可以使用

以上是关于如何在 Android 中使位图加载更快?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使 csv 文件运行得更快

如何在 SkiaSharp 中使 SKBitmap 位图颜色为透明

如何在 Oracle 中使 Select 语句更快

Android:如何在不加载完整位图的情况下将流式图像即时渲染到 ImageView?

如何在android中使用imageloader释放位图内存?

如何从 Android 中的大位图加载图块?