2011-12-16 51 views
1

我創建了一個照片庫,允許您選擇多張照片,但我注意到使用縮略圖填充GridView可能會非常緩慢。我用一個定時器:Android中的快速縮略圖檢索

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張左右的縮略圖被抓住後開始放慢速度。任何人都知道加快縮略圖檢索的任何技巧?

回答

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卡圖像保存設備上的縮略圖。

對於任何有興趣實現自定義照片庫的人,上面的代碼應該工作得很好。如有任何問題請隨時給我發消息。

+0

感謝您的更新!你發現爲什麼內置畫廊與這種方法相比如此之快?我有完全一樣的問題。 – Mars 2015-02-04 21:56:22