package com.example.handlertest2;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class HandlerTest extends Activity {
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.post(r);
setContentView(R.layout.main);
System.out.println("activity---->" + Thread.currentThread().getId());
System.out.println("activity---->" + Thread.currentThread().getName());
}
Runnable r = new Runnable(){
@Override
public void run() {
System.out.println("handler---->" + Thread.currentThread().getId());
System.out.println("handler---->" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
这个程序用来验证Handler处理的Runnable线程和Activity主线程是在同一个线程下执行的。
首先通过打印我们可以看出都是在一个主线程下执行的
并且依照执行顺序,10秒钟之后主界面的控件才显示出来就已经证明了。
但是如果我们不使用Handler来装载Runnable
使用java标准方式来启动这个线程 ,效果就会不一样了。
Thread t = new Thread(r);
t.start();
调用start方法之后,线程进入就绪状态,当时间片轮转动到该线程的时候,线程就获得CPU的使用权
所以从这个实验当中我们就可以证明Handler并不是真正的另外的启动了一个线程,而是直接在原有线程上调用run函数,至于为什么这么做,后面解释