Android 如何等待线程完成
我正在寻找一些关于实现以下任务的最佳方法的建议(我目前的方法很幼稚,给我带来了问题) 以下是我的应用程序启动时应该发生的情况:Android 如何等待线程完成,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,我正在寻找一些关于实现以下任务的最佳方法的建议(我目前的方法很幼稚,给我带来了问题) 以下是我的应用程序启动时应该发生的情况: 首先提示用户登录facebook。我使用facebook 完成时要侦听的DialogListener 完成上述任务后,我使用AsyncFacebookRunner收集一些 有关用户的信息。我使用 AsyncFacebookRunner.RequestListener()在发生此错误时侦听 完成 完成任务2后,我将一些信息存储在SharedReferences中 这一切都
while (true)
{
if (not a valid value of something in SharedPreferences)
Thread.sleep(500);
else
break
}
这是难以置信的丑陋,幼稚,给了我一些问题。在这一点上,我觉得我应该重写整个事情,希望有人能提出一个更好的方法 如果我正确理解您的事件顺序。当#3运行并保存首选项时,为什么它不能通知任何正在写入SharedReferences的值的等待对象?活动风格。这将消除您当前使用的旋转等待
也许我错过了什么?有多种方法可以实现这一点。您可以使用阻塞队列来执行此操作。因此,当队列中存在有效的SharedReference时,线程将使用它 在共享首选项ChangedListener上注册一个
SharedPreferenceChangedListener
,当其中的数据发生变化时,会通知SharedReferences
。好吧,作为一个新的android开发者(可能有一些我不知道的事情)如果没有像上面那样的循环,我看不到实现这一点的方法:/我不能从第二个onComplete(我在那里写入SharedReferences)调用Asynctask。也许我错过了你说的话:D@IamAlexAlright:为什么不能从那里调用Asynctask?为什么不能调用。请在对共享首选项进行更正后执行Asynctask?因为它是私有的。。。whoops>。是否有asynctask的onPostExecute()方法不适合的原因?这总是在doInBackground之后执行,因此如果您在doInBackground中获得了首选项,那么它将在onPostExecute()中可用。
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) {
}
}