2011-07-13 126 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