2011-05-13 71 views
3

我有一个扩展Runnable的类。这个类在不同的线程中执行一些繁重的操作(基本上是从网络下载图像)。我想要更新此类的用户界面(将下载的图像显示为ImageView)。我曾尝试使用处理程序,但没有成功。这里是我的代码:从其他线程处理UI

class DataReceiver implements Runnable 
{ 
    public Bitmap bmp; 
    Public Handler uiHandle; 
    @Override 
    public void run() 
    { 
    while(true) 
    { 
     //do image download process here 
    } 
    } 
} 

在主要活动

ImageView img = (ImageView)findViewById(R.id.dispImg); 
DataReceiver dr=new DataReceiver(); 

Handler uiHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     updateUI(); 
    } 
} 

dr.uiHandle = uiHandler; 
(new Thread(dr)).start(); 

pubic void updateUI() 
{ 
    img.setBitmap(dr.bmp); 
} 

它是用于更新UI的正确方法是什么?

回答

2

差不多; d,你需要在Thread类中添加该linebefore而做的:

while(true) 
    { 
     //do image download process here 
    } 
uiHandle.sendEmptyMessage(0); 
+0

或做什么本说:D – PedroAGSantos 2011-05-13 11:32:30

+0

谢谢!我错过了这条线。 :) – 2011-05-13 13:28:45

3

您可以使用AsyncTask代替,执行doInBackground中run()中的当前操作,然后在任务的onPostExecute中执行UI更新。

+1

或者在onProgressUpdate功能更新UI,如果他需要更新进度条 – inazaruk 2011-05-13 11:36:48

+0

@inazaruk:好点! – 2011-05-13 11:38:38

+0

谢谢!现在我得到了更多的武器;) – 2011-05-13 13:31:04

0

从另一个线程使用

activity.runOnUIThread(new Runnable());