2016-03-15 77 views
0

AsyncTask必须从主线程创建并执行,并且 在工作线程上运行。但是,可以在 之间调用主线程方法来发布进度。了解与处理程序和AsyncTask关联的线程

什么是处理程序?可以从任何线程创建处理程序?哪些线程处理程序运行?处理程序与线程方面的不同之处是什么?

What is the difference between AsyncTask and Handlers and which one would be better to use in Listview? ..这里有提到 - The Handler is associated with the application’s main thread. it handles and schedules messages and runnables sent from background threads to the app main thread. ..如果处理程序在主线程上运行,那么它如何从后台线程调度消息?

+0

相关阅读:http://developer.android.com/guide/components/processes-and-threads.html – Knossos

回答

4

documentation

当你创建一个新的处理程序,它被绑定到创建它的线程的线程/消息队列 - 从这一点上来说,它会传递消息和可运行到该消息队列并在它们从消息队列中出来时执行它们。

这意味着您使用处理程序运行的所有内容都将在该处理程序创建的线程中运行。

为了更好地理解阅读这篇文章:Processes and Threads

+0

可以从任何线程创建处理程序,还是仅从主线程创建处理程序?如果它是从主线程创建的,它是否仅在主线程上运行? – user3684678

+1

它可以从任何线程创建。如果您在主线程中创建它,而不是在主线程中运行。 –

+0

http://stackoverflow.com/questions/8789415/what-is-the-difference-between-asynctask-and-handlers-and-which-one-would-be-bet ..这里提到了 - “处理程序与应用程序的主线程相关联。它处理和调度从后台线程发送到应用程序主线程的消息和可运行内容。..如果它在主线程上运行,那么它如何从后台线程安排消息? – user3684678

1

主线程是UI更新的线程。工作者线程是主线程以外的任何线程。是的,处理程序可以在任何线程中创建,并且与创建它的线程相关联。见Handler

+0

如果从主线程创建的处理程序运行仅在主线程上? – user3684678

+0

如果在主线程中创建了处理程序,则它与主线程消息队列关联。 –

+0

http://stackoverflow.com/questions/8789415/what-is-the-difference-between-asynctask-and-handlers-and-which-one-would-be-bet ..这里提到 - “处理程序与应用程序的主线程相关联。它处理和调度从后台线程发送到应用程序主线程的消息和可运行内容。..如果它在主线程上运行,那么它如何从后台线程安排消息? – user3684678