等待线程完成而不阻止UI线程

时间:2011-04-25 13:59:20

标签: java android multithreading

我在methode中运行一个Thread,我想在线程完成后返回一个值,我试图做的问题是join()但是阻塞了UI线程。 我怎么能等待线程完成然后返回值而不阻止UI线程?

Boolean foo(){

myThread mt = new myThread();
mt.start();     
return mt.isSentSuccessfully;

}

3 个答案:

答案 0 :(得分:4)

您可以使用Android的AsyncTaskhttp://developer.android.com/reference/android/os/AsyncTask.html 当我使用它时,我将后台任务放在一个扩展AsyncTask的类中,并覆盖onPreExecute()onPostExecute(..)方法以显示/隐藏ProgressDialog。它工作得非常好。

答案 1 :(得分:3)

如果您确实不想使用AsyncTask,那么您可能想要定义Handler

然后在后台线程中,当后台作业完成时,向主线程发送一条消息:

ActivityMainThreadClassName.this.myUpdateHandler.sendMessage(m);

其中myUpdateHandler是您创建的处理程序。

答案 2 :(得分:0)

您是否尝试过投票Thread.getState()

这样的事情:

android.os.Handler h = new Handler();
h.postDelayed(new Runnable() { 
public void run () {
      if (thread.getState() == Thread.State.TERMINATED) {
           // your code here
           return;
      }
      h.postDelayed(this, 1000);
}, 1000);

此示例应每秒轮询一次线程状态...(我没有测试它