我有点生气锁定,我正在尝试在我的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;
}
答案 0 :(得分:3)
IMO最简单的方式是声明您的AsyncTask
并存储对它的引用:
MyTask task = new MyTask();
task.execute();
然后在AsyncTask
完成调用之前阻止它阻止:
task.get();
就是这样!
虽然阻止主线程可能不是你想要的方式。更常见的是使用AsyncTask
的回调来完成主线程的更新。
答案 1 :(得分:0)
我认为AsyncTask
的主要目的不是阻止主线程。 AsyncTask
旨在简化UI和非UI线程之间的通信。所以,如果你想阻止UI线程,你可以在Activity
本身编写语句。