【面试】Handler机制与通信的实现

UI Thred(UI线程)push指示消息到MessageQueue(消息队列)当中,之后进入到Looper(消息处理通道)中进行处理,Handler(消息指示接收)根据Looper发送出来的消息执行UI/数据更新等操作。

举一常用例子,用Message在子线程当中实现界面数据更新。

1.自制Handler对消息进行处理

private class MyHandler extends Handler{
  @Override
  public void handleMessage(Message msg) {
    super.handleMessage(msg);
    switch(msg.what){
      case UPDATE ://在收到消息时,对界面进行更新
      mText.setText("This update by message");
      break;

    }
  }
}

2.建立新的线程发送消息

private void updateByMessage() {
  //匿名对象
  new Thread() {
    public void run() { 

//UPDATE是一个自己定义的整数,代表了消息ID 

    Message msg = mHandler.obtainMessage(UPDATE);
    mHandler.sendMessage(msg);
    }
  }.start();
}

补充一下,AsyncTask本事就是一线程池,与Handler相比是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。但是相对Handler而言要更耗资源,且更新UI比较复杂。(两者的特点与区别可查看原文

posted @ 2015-11-20 19:00  gzejia  阅读(270)  评论(0编辑  收藏  举报