Handler第一种方式:
Handler handler = new Handler(){
public void handleMessage(Message msg) {
//此方法里面可以用来处理handler传过来的消息
switch(msg.what){
case 1:
break;
case 2:
break;
}
}
}
然后在其他线程中通过
handler.setEmptyMessage(int a);
方法来传递消息
例子:
public class Test extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
public void init(){
new Thread(){ //新建一个线程去处理耗时任务
public void run(){
... //任务执行代码
if(任务执行成功)
handler.sentEmptyMessage(1);
else
handler.sentEmptyMessage(0);
}
}.start();
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) { //该方法中处理handler发送过来的结果信息
switch(msg.what){
case 0:
//后台任务处理失败
case 1:
//后台任务处理成功
}
}
};
}
第二种方式:
handler.post(Runnable r);
例子:
public class TestHandler extends Activity{
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.testlistview);
init();
}
public void init(){
Log.d("TAG",Thread.currentThread().getId()+"=======当前主线程");
new Thread(){
public void run(){
Log.d("TAG",Thread.currentThread().getId()+"=======newThread线程");
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.d("TAG",Thread.currentThread().getId()+"=======Runnable的线程");
}
});
}
}.start();
}
}
输出
采用handler.post(runnable);直接调用了Runnable对象的run函数,也就说没有经过start函数调用run(), 那么就不会创建一个新线程,而是在原有线程内部直接调用 run()方法,因此线程Id和原线程是相同的,所以可以用这个方法来和主线程进行通信交流。