Activity的onXXX是由MainThread调度的。肯定要等onCreate执行完了,才能再去执行run因为是一个线程,是串行执行的,不可能并行!!!

解决方案 »

  1.   

    先谢谢你的回答,既然是执行的run方法,而不是调用start方法 ,哪和这下面的例子有什么不同?
    public class testdddd { public void post() {
    run.run();
    System.out.println("first execute");
    } Thread run = new Thread() {
    public void run() {
    System.out.println("sub thread");
    try {
    run.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    run.run();
    }
    };
    public static void main(String[] args) {
    new testdddd().post(); }
    }
      

  2.   

    post是把线程POST到队列中,然后就直接执行下面的代码,而不会等handler 去取完线程再往下执行。个人愚见,暂没深究
      

  3.   

    直接调用run方法就是调用一个普通的方法,不会新开一个线程。
    在run里面调用run.run(); 这个陷入死循环了吧?
    执行不到System.out.println("first execute");
    ————个人理解,没有验证。
      

  4.   

    是会死循环的,我想说的是,既然执行post的时候会调用run方法,哪就会先输出死循环的里的东西然后才往下走。回到上面的问题中,我想的是先打印出来:
    03-17 11:09:19.711: INFO/System.out(645): handler thread name:main
    03-17 11:09:19.711: INFO/System.out(645): handler thread id:1
    这两行,而不是先打印虾米那的两行
    03-17 11:09:19.671: INFO/System.out(645): activity thread name:main
    03-17 11:09:19.671: INFO/System.out(645): activity thread id:1
    ,能否解释一下,post方法执行后经过一个什么过程才会去调用run方法?
      

  5.   

    刚看了下源码,确实是把线程放到队列中,然后就返回了,接着就往下执行了。等到onCreate这个方法执行完后在去调用run方法。网上查的说的是一个Looper对象一直在循环着,等到onCreate方法执行完后在去调用run方法。。不知道是不是这样。。
      

  6.   

    肯定是这样的。
    post完了还是在排队,到底onCreate执行完之后是否执行run,还要看他排队排在哪。
      

  7.   

    这个涉及到一个线程的主从问题,post是等主线程执行完后才执行的。