Android handler的问题:
package mars.handler;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;public class HandlerTest extends Activity {

private Handler handler = new Handler();

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// sendMessage();
handler.post(r);
                  setContentView(R.layout.main); //System.out.println("1: "  + System.currentTimeMillis());

// Thread t = new Thread(r) ;
// t.start();




System.out.println("a--->" + System.currentTimeMillis());
System.out.println("activity--->" + Thread.currentThread().getId());
System.out.println("activityname--->" + Thread.currentThread().getName());
}


Runnable r = new Runnable() {

public void run() {
//System.out.println("2: "  + System.currentTimeMillis());
System.out.println("handler--->" + Thread.currentThread().getId());
System.out.println("handlername--->" + Thread.currentThread().getName()); try {
Thread.sleep(10000);
System.out.println("r2---?" + System.currentTimeMillis());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
};
}按照执行的顺序:怎么这条语句:setContentView(R.layout.main);在两条System.out.println之前。而setContentView(R.layout.main);却是最后执行的?这是为什么?

解决方案 »

  1.   

    handler.post(r)是异步执行,相当于又开了一个子线程,所以不能保证它们的执行顺序
      

  2.   


    这是异步过程,也就是说启动的r方法是异步线程启动的方法,可能会在 setContentView前,也可能在setContentView后,如果要实现LZ想要的那种效果,是同步,也就是按代码逐个执行
      

  3.   

    LZ发了一个帖子,我和另外一个人都在看帖子,LZ就是主线程,我和另外一个人都是另起的异步线程,你能保证我和看帖的另外一个人谁发的帖子先显示出来么?
      

  4.   

    异步并不代表就一定是多线程。这个显然只有一个线程,异步的效果是用callback做出来的呀, handler.post(r)在setContentView之前调用的,所以在事件队列里它可能在ui刷新之前,很可能就是永远会先执行。