Handler简单上手

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和原线程是相同的,所以可以用这个方法来和主线程进行通信交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值