【发布时间】:2012-12-21 18:18:52
【问题描述】:
全部:
我正在研究具有与其他实例变量一起声明和实例化的处理程序的代码:
public class SomeActivity extends Activity {
Handler handler = new Handler(); // What thread is this taking place on?
// rest of class omitted
}
那么它是在 UI 线程上实例化的吗?我希望如此,因为它用于将 Runnable 发布到 ProgressBar,而我的理解是 ProgressBar 应该只在 UI Thread 上进行操作。
Android 文档说在 onCreate() 中创建的东西是:
应用程序的活动在应用程序的 UI 线程上运行。一次 UI 被实例化,例如在活动的 onCreate() 方法,那么与 UI 的所有交互都必须在 UI 线程中运行。”
但这发生在 onCreate() 之前。
感谢您提供任何信息,
迈克尔
【问题讨论】:
-
在 onCreate() 之前什么都没有发生,除了类级别字段的初始化。你有一个新的 Handler(),它什么也不做。 Runnable 在哪里发布?要回答您的问题,由于 Handler 是在 Activity 的上下文中声明的,因此它的 Runnable 将在 UI 线程上运行。如果没有,并且它触及了一个视图,就会抛出一个异常。
标签: android multithreading handler android-progressbar