用AsyncTask锁定/条件?

时间:2013-04-30 18:19:56

标签: java android locking

我有点生气锁定,我正在尝试在我的Android应用程序上进行简单的网络通信。不用说,你必须在android中使用AsyncTask来进行这些通信。如何在AsyncTask完成之前锁定主线程?

public int read(){
    ReadTCPTask t = new ReadTCPTask();
    boolean canGoOn = false;
    // We can proceed once we acquire the lock?
    while (!canGoOn)
        canGoOn = lock.tryLock();
    t.execute();
    // something that will wait here until the asynctask is done?
    return readSize;
}

2 个答案:

答案 0 :(得分:3)

IMO最简单的方式是声明您的AsyncTask并存储对它的引用:

MyTask task = new MyTask();
task.execute();

然后在AsyncTask完成调用之前阻止它阻止:

task.get();

就是这样!

虽然阻止主线程可能不是你想要的方式。更常见的是使用AsyncTask的回调来完成主线程的更新。

答案 1 :(得分:0)

我认为AsyncTask的主要目的不是阻止主线程。 AsyncTask旨在简化UI和非UI线程之间的通信。所以,如果你想阻止UI线程,你可以在Activity本身编写语句。