2012-12-21 87 views
0

所有:Android,实例化实例变量,什么线程?

我学习有一个声明和实例与其他实例变量沿处理代码:

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之前发生的事情()。

感谢任何信息,

迈克尔

+0

除了初始化类级别字段之外,onCreate()之前没有任何反应。你有一个新的Handler(),它什么都不会做。 Runnable在哪里发布?为了回答你的问题,由于Handler是在Activity的上下文中声明的,所以它的Runnable将在UI线程上运行。如果没有,并且触及View,则会抛出异常。 – Simon

回答

0

所以它被实例化的UI线程?

是的。处理程序将存在于它创建的线程中。你正在主/ UI线程上创建你的,所以它可以访问UI元素。

但是这是在onCreate()之前发生的。

这不会影响Handler运行的Thread。

+0

感谢您的解释。 –

+0

处理程序没有很好的文档记录,但如果您对处理程序和循环程序的更长时间和更技术性的解释感兴趣,这是一篇[好文章](http://mindtherobot.com/blog/159/android-guts-intro -to-弯针和 - 处理/)。 – Sam

0

除非您专门在后台线程上运行它,否则主线程(又称UI线程)上的任何事情都会发生。所以,是的,您的处理程序是在UI线程中创建的。

+0

好的,谢谢,iagreen。 –