当前位置: 移动技术网 > IT编程>移动开发>Android > 详解Android UI更新的几种方法

详解Android UI更新的几种方法

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

神秘首席的契约,少年派的奇幻漂流qvod,显卡维修

前言

在android开发中,界面ui的更新都是在主线程来完成的。线程分为主线程(main thread,简称mt)和工作线程(work thread,简称wt),我们通常会在wt中执行一些比较耗时的操作,比如下载,网络,缓存等,然后在将结果发送给mt进行ui的更新操作。如果是在wt进行ui的更新,则会抛出异常,android.view.viewroot$calledfromwrongthreadexception: only the original thread that created a view hierarchy can touch its views.(只有创建这个view的原始线程才能修改这个view)。

在bt搜索、wifi搜索、其他需要更新view的ui过程中,很多是采用广播的方式通知搜索的结果,实时的显示到listview中进行ui的更新操作。通常会使用以下几种方式进行ui的更新:handler,runonuithread,子线程发送message。

一、activity.runonuithread

利用activity.runonuithread(runnable)把更新ui的代码创建在runnable中,然后在需要更新 ui时,把这个runnable对象传给activity.runonuithread(runnable)。这样runnable对像就能在ui程序中被调用。如果当前线程是ui线程,那么行动是立即执行。如果当前线程不是ui线程,操作是发布到事件队列的ui线程。

mactivity.runonuithread(new runnable() {
  @override
  public void run() {
    log.e(tag, "开始添加设备!");
    adddevice(device);
  }
});

二、handler.post(runnable)

handler.post(new runnable() {
  @override
  public void run() {
    adddevice(device);
  }
});

三、子线程发送message

首先在需要执行更新的位置添加以下代码

new thread(new runnable() {
  @override
  public void run() {
    //message msg = new message();
    //msg.what = 0x06;
    //handler.sendmessage(msg);
    handler.sendemptymessage(0x06);
  }
}).start();

然后进入handler下进行处理

final handler handler = new handler() {
  @override
  public void handlemessage(message msg) {
    switch (msg.what) {
        case 0x06:
          adddevice(device);
        break;
      default:
        break;
    }
    super.handlemessage(msg);
  }
};

以上三种方法都可以实现ui的更新,掌握哪种方式取决于代码中的叠加度,不过个人推荐使用方法一。希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

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

相关文章:

验证码:
移动技术网