当前位置: 移动技术网 > IT编程>移动开发>Android > Android使用Handler和Message更新UI

Android使用Handler和Message更新UI

2019年07月24日  | 移动技术网IT编程  | 我要评论

荀慧生图片,碧血洗银枪国语,tara成员左乳曝光

在android中,在非主线程中更新ui控件是不安全的,app在运行时会直接crash,所以当我们需要在非主线程中更新ui控件,那么就需要用到handler和message来实现
demo中,使用到一个按钮和一个textview,点击按钮之后改变textview的内容,按钮点击时候新建一个进程,在进程中对ui控件进行修改。

public class mainactivity extends activity implements onclicklistener {
  private static final int update_text = 1;
  private button send;
  private textview tv;
  
  private handler hd = new myhandler();

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    send = (button) findviewbyid(r.id.bt_sendmessage);
    tv = (textview) findviewbyid(r.id.tv_text);
    send.setonclicklistener(this);
  }

  @override
  public void onclick(view v) {
    switch (v.getid()) {
    case r.id.bt_sendmessage:
      new thread(new runnable() {
        @override
        public void run() { // 新建一个线程,并新建一个message的对象,是用handler的对象发送这个message
          message msg = new message();
          msg.what = update_text; // 用户自定义的一个值,用于标识不同类型的消息
          hd.sendmessage(msg); // 发送消息
        }
      }).start();
      break;

    default:
      break;
    }
  }
  
  // 定义一个内部类继承自handler,并且覆盖handlemessage方法用于处理子线程传过来的消息
  class myhandler extends handler{
    @override
    public void handlemessage(message msg) {
      super.handlemessage(msg);
      switch (msg.what) {
      case update_text: // 接受到消息之后,对ui控件进行修改
        tv.settext("修改成功!");
        break;

      default:
        break;
      }
    }
  }
}

理解:先在主活动中定义一个内部类,并继承自handler,并且覆盖handler中的handlemessage方法,这个方法在handler中是一个空方法,便于我们自定义消息的内容。然后在oncreate方法中,获取button并且添加点击事件,在事件中添加一个线程,在线程中,使用message类封装一个消息,然后用handler的对象发送这个消息,handler对象的handlemessage方法就会被调用,达到改变textview的内容的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网