我在methode中运行一个Thread,我想在线程完成后返回一个值,我试图做的问题是join()但是阻塞了UI线程。 我怎么能等待线程完成然后返回值而不阻止UI线程?
Boolean foo(){
myThread mt = new myThread();
mt.start();
return mt.isSentSuccessfully;
}
答案 0 :(得分:4)
您可以使用Android的AsyncTask
。
http://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);
此示例应每秒轮询一次线程状态...(我没有测试它)