Java 等待线程完成而不阻塞UI线程

Java 等待线程完成而不阻塞UI线程,java,android,multithreading,Java,Android,Multithreading,我在methode中运行一个线程,我想在线程完成后返回一个值,这个问题是我试图执行join()的,但它阻止了UI线程。 我如何等待线程完成,然后返回值而不阻塞UI线程 Boolean foo(){ myThread mt = new myThread(); mt.start(); return mt.isSentSuccessfully; } 您可以使用Android的AsyncTask来实现这一点。 使用它时,我将后台任务放在一个类中,该类扩展了AsyncTask,并覆盖onP

我在methode中运行一个线程,我想在线程完成后返回一个值,这个问题是我试图执行join()的,但它阻止了UI线程。 我如何等待线程完成,然后返回值而不阻塞UI线程

Boolean foo(){

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

}

您可以使用Android的
AsyncTask
来实现这一点。
使用它时,我将后台任务放在一个类中,该类扩展了
AsyncTask
,并覆盖
onPreExecute()
onPostExecute(…)
方法,以显示/隐藏
ProgressDialog
。它工作得非常好。

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

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

ActivityMainThreadClassName.this.myUpdateHandler.sendMessage(m);

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

您是否尝试轮询
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);

此示例应每秒轮询一个线程状态。。。(我没有测试过)

我已经看过了,但我认为这不是我想要做的最合适的,我怎么能等到它完成,然后在调用方法中返回值?我不知道这是否可行。您说不想阻止UI,但希望调用方法(可能来自当前活动)调用长时间运行的方法并等待其返回。您可以让长时间运行的线程在活动完成其任务时调用该活动。@Fevos:如果在其他线程完成之前不阻止,您可以从方法返回什么值?做到这一点的唯一方法是根本不在UI线程中调用您的方法,将工作卸载到后台线程。。。这正是AsyncTask所做的。@Fevos:你想要的是不可能的,也没有必要的。我会告诉你为什么有必要,我需要其他开发人员使用我的类,并能够调用该方法并获得响应,如果不可能,那么我可以寻求其他解决方案,但我认为没有必要!提供一些代码可能会有所帮助。你有什么理由不能扭转局面,在完成后向UI发出后台线程信号?(这是做事情的正常方式,因此可以避免轮询。)您能否详细解释一下,或者提供一段代码片段,说明如何做到这一点。感谢您的示例表明您不需要线程来完成工作。如果您正在等待线程完成,那么根本没有理由产生一个新线程。实际上,这会减慢整个过程。