1.消息队列
例子说明:
启动线程执行耗时操作,改变当前activitiy的某个控件的内容
1.编写自己的handler
class MyHandler extends Handler{
TextView view;
public MyHandler(TextView view){
this.view=view;
}
//此方法可以从消息队列中取出消息并设置给需要的控件
@Override
public void handleMessage(Message msg) {
view.setText(msg.obj.toString());
}
}
2.编写线程
class runnableThread implements Runnable{
private MyHandler mh=null;//此处是自己的handle,用它可以往消息队列里边添加消息
public runnableThread(MyHandler mh)
{
this.mh=mh;
}
@Override
public void run() {
//---------------此处执行耗时操作
Message ms = Message.obtain(mh);
ms.obj=i;//设置显示数据
ms.sendToTarget();//此处将要显示的数据放到消息队列里边,有handlemessage()处理数据
}
}
}
3.声明自己的handle,
MyHandler mh= new MyHandler(textview);
此handle会自动获取消息队列里的消息,并将数据设置给提供的控件
4.要想显示数据,关键是要有数据,
Thread t = new Thread(new runnableThread(mh));
那么刚才写的线程,就是给此handle的消息队列里边添加消息的,
5.这样就完成了线程通信
启动额外线程改变当前activity内的控件的显示消息,不影响用户体检。
2.线程队列
1.启动HandlerThread
HandlerThread ht = new HandlerThread("ht");
ht.start();
2.构建handler
Handler handlert = new Handler(ht.getLooper());
3.往线程队列里边压入线程
handlert.post(new runnableThread());
4.完成 那么你压入的线程,将依次被从队列里取出并执行,