2011-07-13 129 views
0

我有一個應用程序使用來自web的圖像來源。對於我的應用程序,我首先在單獨的線程中下載圖像,並且僅當我在列表中顯示的磁盤上存在圖像時。 Downloader是一個單獨的線程,但我很新使用線程,現在別的東西讓我困惑。除非我刷新視圖,否則我的圖像不會顯示,這是我的列表。現在,我需要證明我的圖片,所以我寫這在我的自定義視圖:問題異步加載圖像

private Runnable LoaderTask=new Runnable(){ 
    public void run() { 
     if(cellIcon!=null){ 
      if(iconCache.get(cellIcon)!=null){    
       icon.setImageBitmap(iconCache.get(cellIcon)); 
       mHandler.postDelayed(this, 200); 
      } 
     } 

    } 

}; 
private class ImageThread extends Thread{ 

    @Override 
    public void run() { 
     // mHandler.removeCallbacks(LoaderTask); 
      mHandler.postDelayed(LoaderTask, 100); 


    } 

} 

我觸發我的線程這樣

ImageThread thread=new ImageThread(); 
    thread.start(); 

處理程序在類的開始被實例化。但是當我這樣做的時候,沒有什麼事情發生,直到我刷新我的觀點。我嘗試(活動).runOnUIThread裏面我的一個線程我得到了stackoverflow錯誤。我該如何解決這個問題,或者是否有其他建議。你可以給我嗎?謝謝

回答

1

使用AsyncTask。在onPostExecute()方法中,只需調用活動中的方法並刷新UI。 onPostExecute()在線程完成時被調用。

http://developer.android.com/resources/articles/painless-threading.html

附:要調用一個活動的方法,只需使用Interface。

+0

嗨佩皮,謝謝您的回答。它幫助了我很多,但仍然沒有異步加載圖像。我嘗試這樣'code'私有類LoadImageTask延伸的AsyncTask ,無效位圖> { \t \t @Override \t \t保護無效onPostExecute(位圖結果){ \t \t \t icon.setImageBitmap(結果); \t \t} \t \t @覆蓋 \t \t保護的位圖doInBackground(HashMap的<字符串,位圖> ... PARAMS){ \t \t \t \t回model.getIconCache()得到(cellIcon)。 \t \t \t \t \t} \t \t \t}'code'但我m如果同樣的事情。圖標緩存正在加載的時間我需要一個任務來定期檢查緩存,如果看到一個項目 – ikbal

+0

定期檢查,使用AlarmManager定期運行您的任務 –

+0

嗯,其實我也不知道如何使用AlarmManager,但我會檢查它,謝謝 – ikbal