[英]How to wait until thread is finished
我正在寻找关于实现下面任务的最佳方法的一些建议(我目前的方法非常天真并且导致我的问题)
以下是我的应用启动时应该发生的事情:
首先,提示用户登录Facebook。 我使用facebooks DialogListener来监听它何时完成。
完成上述任务后,我使用AsyncFacebookRunner收集有关用户的一些信息。 我使用AsyncFacebookRunner.RequestListener()来监听何时完成。
完成任务2后,我将一些信息存储在SharedPreferences中
这一切都很精彩。 这是问题...我需要在http POST中使用一些所述信息来获取服务器上的数据。 数据用于填充网格视图。 为此,我使用的是Asynctask。 我的问题在于不知道SharedPreferences中的数据何时存在。
截至目前在doInBackground中,我有一个这样的循环:
while (true)
{
if (not a valid value of something in SharedPreferences)
Thread.sleep(500);
else
break
}
这是非常丑陋,天真,并给我一些问题。 在这一点上,我觉得我应该重写整个事情,所以希望有人可以建议一个更好的方法!
使用SharedPreferences
注册OnSharedPreferenceChangedListener
,以便在数据发生变化时收到通知。
如果我理解你的事件顺序。 当#3正在运行并保存首选项时,为什么它不能通知等待它写入SharedPreferences的值的任何内容? 活动风格。 这将消除您当前使用的旋转等待。
也许我错过了什么?
有各种方法来执行此操作。 您可以使用阻塞队列来执行此操作。 因此,当存在有效的SharedPreferences时,即在队列中它将由线程使用。
private volatile boolean mLock = false;
void otherThreadFunc() {
mLock = true;
Thread.sleep(10000);
mLock = false;
}
void mainThread() {
new Thread(new Runnable() {
public void run() {
otherThreadFund();
}
}.start();
// Wait...
while(mLock) {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.