【问题标题】:Fast Thumbnail Retrieval in AndroidAndroid中的快速缩略图检索
【发布时间】:2012-01-22 04:02:44
【问题描述】:

我创建了一个允许您选择多张照片的照片库,但我注意到使用缩略图填充 GridView 可能会非常慢。我使用计时器:

timer = new Timer();
timer.schedule(new TimerTask() {        
    @Override
    public void run() {
        fetchNextThumb();
    }
}, 0, 25);

它在 GridView 中搜索没有缩略图的孩子(我一直禁用它),如果尚未缓存,则从 MediaStore 检索正确的拇指,并在 UI 线程上执行 setImageBitmap():

private void fetchNextThumb()
{
    for (int i = 0; i < gridView.getChildCount(); i++)
    {
        ImageSelectView isv = (ImageSelectView)gridView.getChildAt(i);
        if (isv == null)
            continue;
        if (isv.isEnabled())
            continue;
        activeThumb = thumbCache.get(isv.getId());
        if (activeThumb == null)
        {
            activeThumb = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), isv.getId(), MediaStore.Images.Thumbnails.MICRO_KIND, null);
            thumbCache.put(isv.getId(), activeThumb);
        }
        activeView = isv;
        runOnUiThread(setNextThumb);
        return;
    }
}
private Bitmap activeThumb;
private ImageSelectView activeView;
private Runnable setNextThumb = new Runnable() {
    public void run() {
        activeView.setImageBitmap(activeThumb);
        activeView.invalidate();
        activeView.setEnabled(true);
    }
};

一开始速度非常快,但在抓取了大约 50 个左右的缩略图后开始变慢。有人知道加快缩略图检索的技巧吗?

【问题讨论】:

    标签: android thumbnails mediastore


    【解决方案1】:

    嗯,我明白了为什么有些缩略图的加载速度比其他缩略图快。我正在使用

    managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{ MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }, null, null, MediaStore.Images.Media._ID);
    

    这显然是从 SD 卡和设备中抓取图像。不出所料,SD 卡图像的拇指加载速度比设备上的慢。尽管如此,内置画廊似乎没有这个问题。我现在的解决方案是在加载一次后为 SD 卡图像保存设备上的缩略图。

    对于任何有兴趣实现自定义照片库的人来说,上面的代码应该可以很好地工作。如有任何问题,请随时给我发消息。

    【讨论】:

    • 感谢您的更新!你知道为什么内置画廊与这种方法相比如此之快吗?我有完全相同的问题。
    猜你喜欢
    • 2013-04-03
    • 2012-06-02
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多