【问题标题】:android how to wait the result from other thread with displaying a progressdialogandroid如何通过显示进度对话框等待其他线程的结果
【发布时间】:2012-07-17 11:40:23
【问题描述】:

谁能说说Thread和AsynTask的区别~ 我不得不这样的事情:

class A{

  int nTmp;
  ClassB BTmp = new ClassB();
  ClassC CTmp = new ClassC();

//I want to put the next two lines into a separate thread, because they will consume so much time
//and I want to display a ProgressDialog when do this two lines

   Method1(nTmp, BTmp);
   CTmp = Method2();

   if(Method2(CTmp)){
      return true;
   }
   return false;
}

这是我的问题:

  1. 如果我使用新线程,我无法将属于 A 类的 [nTmp] 和 [BTmp] 传递给单独的线程。
  2. 因为我想使用这两行的结果,所以当它必须显示进度对话框时,我必须在 UI 线程中等待 result[CTmp]。
  3. 我试过AsynTask,但还是有问题2。

我发现我的重点是如何通过显示进度对话框等待其他线程的结果。有没有一个类可以做到这一点?

【问题讨论】:

标签: android multithreading


【解决方案1】:

您不应该等待其他任务 B 完成,而是任务 B 应该告诉任务 A 它已完成。根据您的方法的用途,您还可以使用其他功能来启动后台处理,例如 IntentService。 AsyncTask 很可能会为您提供最好的服务。

【讨论】:

  • 谢谢。我无法使用 ProgressDialog 等待 UI 线程?
  • 因为我不用更新UI,所以我觉得AsyncTask不是最适合我的。
  • 不确定我是否理解正确,但更新 UI 的全部技巧是您不能从所有线程中执行此操作,而不是因为您使用了 AsyncTask 就必须更新 UI。如果我理解正确,您需要同步两个任务,所以我还是要再说一遍:不要等待。让其他任务通知您。只需重构您的代码,以便后台任务可以通知主任务它已完成(无论是可运行的、onPostExecute() 还是您采用的任何方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多