2012-06-28 54 views
3

该文档说明必须从UI线程调用execute()。但是,由于每隔几秒更新一次图像,我正在使用Runnable。在那里,我定义了必须执行的操作。开始(执行())ASyncTask就是其中之一。但是,由于ASyncTask不应该从UI线程以外的其他任何地方调用,我该如何继续?Android如何实现可运行的异步执行任务

回答

5

只需添加runOnUiThread在Runnable接口启动的AsyncTask:

private Runnable updateImages= new Runnable() { 
    public void run() { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       // call your asynctask here 
      } 
     } 
    }); 
    //////YOUR CODE HERE 
} 
+0

你几乎不得不把runOnUiThread放在一个有条件的地方,否则会减慢你的整个程序 –

+1

+1我会用'runOnUiThread()' –

+0

我可以做一个sendMessage而不是runOnUiThread,然后由于Handler在UI上实现线程,我将处理该消息,即在那里启动ASyncTask。 – Namratha

1

可能重新设计您的项目只能使用AsyncTask s而不是Runnable。我不确定AsyncTask如何喜欢这种行为,但我之前更改过一些AsyncTasks中的UI。

0

你在这里。

private Handler mHandler = new Handler(Looper.getMainLooper()); 

private Runnable updateImages= new Runnable() { 
    public void run() { 
     ......... 
     ......... 
     ......... 

     mHandler.post(new Runnable() { 
      public void run() { 
       call your asynctask here 
      } 
     }); 
    } 
}; 
+0

但它不是在主线程上。这有效吗?这与文件所述相反。 – Namratha