Android中的处理程序和线程

时间:2011-03-07 22:35:53

标签: android

我试图了解后台线程的工作原理。我从我的活动中调用了一个后台线程,我也在这个活动中实现了我的线程处理程序。假设用户在我的后台线程运行时转到活动b。当我的后台线程完成其操作时会发生什么情况我将不得不在应用程序中的每个单独的活动中实现处理程序,或者是否会自动调用活动a中的处理程序并指导用户进行活动?

2 个答案:

答案 0 :(得分:1)

通常,您通常希望使用AsyncTask进行线程处理,因为它允许您使用onPreExecute()onPostExecute()中的UI线程。

当关联的活动未激活时,您不应该做太多。理想情况下,您可以在onPause()中停止一个帖子。

对于除活动之外需要有自己生命的任务,建议使用Services。来自文档:

  

服务是一个应用程序组件   代表一个应用程序   渴望执行更长时间的运行   操作时不与之交互   用户或提供功能   用于其他应用程序。

然后,您可以让多个活动与执行长时间运行的同一服务进行交互。

答案 1 :(得分:1)

Handler javadoc说:

Each Handler instance is associated with a single thread and that thread's 
message queue.

由于创建了所有活动并且在主应用程序线程(也称为EDT)上调用了它们的方法,这是您创建Handler的地方,然后当您从后台线程调用处理程序(通过post()或类似方法)时将在EDT执行。

what happens when my background thread finishes its operation will i have to 
implement handlers in every single activity in the app or will the handler from 
activity a will be automatically invoked and will direct the user to activity a?
  1. 当在后台线程中调用handler.post(runnable)时,runnable的run()方法将在您创建处理程序(=主应用程序线程)的线程中执行。
  2. 不会将用户定向到活动A或使其可见。它只会执行您在活动A中定义的runnable.run()方法。