使用handler并没有创建一个新的进程,没有新的进程必须要开启之后才行(start方法),而是一种假线程,每个创建一个handler就将一个线程和消息队列绑定在一起。
如何创建一个新的进程,看下面的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("Activity Id: " + Thread.currentThread().getId());
System.out.println("Activity Name: " + Thread.currentThread().getName());
//创建一个新的进程,必须使用start方法启动
HandlerThread thread = new HandlerThread("otherThread");
thread.start();
//将新的线程和handler绑定在一起
//每个线程里面都有各一个looper,looper用于循环接受消息
MyHandler myHandler = new MyHandler(thread.getLooper());
//发送message到myhandler中
Message msg = myHandler.obtainMessage();
//将数据放入bundle中,通过消息发送
Bundle bundle = new Bundle();
bundle.putString("name", "gap");
bundle.putInt("age", 23);
msg.setData(bundle);
msg.sendToTarget();
}
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("otherThread Id: " + Thread.currentThread().getId());
System.out.println("otherThread Name: " + Thread.currentThread().getName());
System.out.println("name--->" + msg.getData().getString("name"));
System.out.println("age--->" + msg.getData().getInt("age"));
}
}
用handlerThread创建一个线程,并用start开始,实现了一个真正的线程,并用Bundle实现数据的传输。
Looper用于循环接受消息的类
由于本人也是刚刚学习Android,很多地方也解释不清楚。