详解Android UI更新的几种方法

详解Android UI更新的几种方法,第1张

概述前言在android开发中,界面UI的更新都是在主线程来完成的。线程分为主线程(MainThread,简称MT)和工作线程(WorkThread,简称WT),我们通常会在WT中执行一些比较耗时的 *** 作,比如下载,网络,缓存等,然

前言

在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的更新,掌握哪种方式取决于代码中的叠加度,不过个人推荐使用方法一。希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的详解Android UI更新的几种方法全部内容,希望文章能够帮你解决详解Android UI更新的几种方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1145999.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存