2012-08-15 121 views
0

我正在UI线程中执行一些任务,并创建了一个为我执行网络任务的工作线程。不过,一旦工作线程完成,我需要执行一些重要的事情。任何人都可以给我一个解决方案吗?Android ::在主线程中执行其他任务之前阻止主线程完成主线程

{ 
    Main thread... 
    worker thread created..and executed.. 
    //I need to wait here for the worker thread to finish// 
    some useful task to be done 
} 

在此先感谢!

回答

3

你需要在工作完成后在UI线程上做些什么?在工人末端使用runOnUiThread或使用AsyncTaskonPostExecute()。在工作人员运行时阻塞UI线程没有任何意义。

+0

感谢哥们!我了解你提到的方法。但是,如果我有多个工作线程,我将如何处理?我的意思是我有3个工作线程,比如A,B,C,它们正在执行不同的任务。我的主线程需要等待所有这些线程完成,以便它可以继续并在主线程中执行新的任务T.请建议。 – user1601533 2012-08-15 19:56:06

+0

@ user1601533:让三个后台线程阻塞某些内容(例如'CountDownLatch')。一旦闩锁被释放,三个线程中的两个只是终止,而第三个使用'runOnUiThread()'或等价的方式将工作发布到主应用程序线程。 – CommonsWare 2012-08-15 20:00:32

+0

是的。或者让主线程在完成每个工作人员后更新某个状态变量,并在某个状态下启动另一个任务。 – ekholm 2012-08-15 20:04:18

0

你不知道。阻止UI线程违反了Android中线程的关键规则。 这样做会导致那些烦人的“应用程序未响应”对话框以及其他问题。

Processes and Threads页面开发文档的:

所以,你不能操纵从一个工人的UI线程,你必须做的所有操作,以从UI线程的用户界面。因此,有简单的两个规则Android的单线程模型:

不要阻塞UI线程

不要从UI线程外部访问Android的UI工具包

您应该探索其他解决方案到你需要完成的事情。您无需针对您的问题提供具体信息,但ekholm的解决方案可以工作,就像只需在工作线程中调用Activity中的方法一样。

相关问题