在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?
首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。
而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。 见代码:
package mars.handler;imp
ort android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock; 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);
//Thread t = new Thread(r);
//t.start();
System.out.println("activity--->" + Thread.currentThread().getId());
System.out.println("activityname--->" + Thread.currentThread().getName());
}
Runnable r = new Runnable(){@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("handler--->" + Thread.currentThread().getId());
System.out.println("handlername--->" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};}
在执行上面的代码后,发现HandlerTest等待了10秒后,才显示自己的主界面,而且在Runnable内打印的线程id和UI线程打印的线程id相同!!!说明该程序中的Runnable是在UI线程中执行的,并没有创建新的线程!!!
常见的新建线程的方法是:
方法一:Java方法
Thread thread = new Thread();
thread.start();
方法二:
HandlerThread thread = new HandlerThread("string");
thread.start();