您的位置:首页 > 职场人生

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

2015-11-20 19:00 197 查看
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比较复杂。(两者的特点与区别可查看原文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: