我知道handler是将一个消息(我这里是runable)放入UI activity的队列中,消息被排队进行处理。那么在下面的程序中,runable是队列中唯一的消息,因此直接被处理,也就是程序运行时,执行休眠10000ms后,屏幕上才会显示activity中的控件,事实也确实如此。可我认为输出"hello~"应该和控件的显示是同一时间,也就是10000ms后。可为什么结果却是程序一运行就直接输出了"hello~",而activity的控件却是10000ms后显示的呢?
public class Handle_01Activity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
      
        firstHandler.post(runnable);        setContentView(R.layout.main);
        System.out.println("hello~");
        }
 Handler firstHandler = new Handler();
  Runnable runnable = new Runnable()
{
     @Override
public void run()
{
try
{
Thread.sleep(10000);
} catch (Exception e)
{}
                  }
};
}

解决方案 »

  1.   

    handler 是进入了队列。但是System.out是另外的队列吧。应该不是一个队列。
      

  2.   

    你那个handler 是 依赖ui 线程的,所以其实还是在UI线程中工作的. static HandlerThread task = new HandlerThread("task");
        static {
            task.start();
        }
        Handler firstHandler = new Handler(task.getLooper());
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(10000);
                    Log.i("jesus", Thread.currentThread().getName());
                } catch (Exception e) {
                }
            }
        };
      

  3.   

    怎么会不是一个队列呢?不就是UI的messageQueue么?不应该是排在一个队列里,先进先出的么
      

  4.   


    对,handler是依赖于UI的,我疑惑的就是既然依赖于UI,那就应该按照顺序,先休眠10000ms,再出Activity界面,再输出“Hello~”,这样子排着队进行的,为什么结果却先输出“Hello~”,再执行别的呢?
      

  5.   


    一个类的运行,JVM做会以下几件事情 1、类装载 2、链接 3、初始化 4、实例化;而初始化阶段做的事情是初始化静态变量和执行静态方法等的工作
      

  6.   


    你是说System.out.println()是静态方法么?