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

猜你喜欢

转载自blog.csdn.net/zzzypp/article/details/64905852