前言

在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刷新界面的几种方法,Android UI更新的几种方法相关推荐

  1. 仿联想商城laravel实战---5、无刷新的增删改查(动态页面更新的三种方式(html))...

    仿联想商城laravel实战---5.无刷新的增删改查(动态页面更新的三种方式(html)) 一.总结 一句话总结: 直接js增加删除修改html 控制器直接返回处理好的页面 用双向绑定插件比如vue ...

  2. sumproduct函数的使用方法 PHP强制更新图片缓存的方法

    本篇文章主要介绍了"sumproduct函数的使用方法 php强制更新图片缓存的方法",主要涉及到sumproduct函数的使用方法方面的内容,对于PHP教程感兴趣的同学可以参考一 ...

  3. android更新UI(界面)的方法;android刷新界面数据的方法;android定时器更新界面

    Android中常常需要对UI界面进行更新.下面我将介绍的是定时更新UI的几种方法: 一.定时器更新UI的两种方法 1.使用Timer的方式 private Timer timer=new Timer ...

  4. Kotlin 开发Android app(十八):线程Thread和UI更新

    多线程的好处是不言而喻的,它能帮我们刚更多的事情,同时干不同的事情在程序设计中是经常出现的,这种时候我们使用的是线程. 在Kotlin 中,使用的还是原先java 的那一套,用的还是Thread ,可 ...

  5. 一种屏蔽win10指定更新补丁的设置方法

    WIN10自动更新关闭,系统又会自动打开, 系统补丁安装上除了系统空间减少外,导致某些软件运行异常是大件事,需要手动去"程序管理"删除卸掉新安装好的补丁,重启系统,软件运行正常了: ...

  6. android中实现view的更新有两组方法

    android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用.     Android提供了 ...

  7. android生命周期方法,Android零基础入门|Activity状态和生命周期方法

    原标题:Android零基础入门|Activity状态和生命周期方法 前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还 ...

  8. Android常见界面布局

    第2章 Android常见界面布局 第2章 Android常见界面布局 2.1 View视图 2.2 界面布局编写方式 2.2.1 在XML文件中编写布局 2.2.2 在Java代码中编写布局 2.3 ...

  9. android 自动补全方法,Android零基础入门|自动完成文本框AutoCompleteTextView

    原标题:Android零基础入门|自动完成文本框AutoCompleteTextView 上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用. ...

  10. android10桌面布局好看,让你的Android手机界面布局更好看

    机友是否觉得你的Android界面布局不够好看?想换一种手机界面?也许很多朋友都能够很简单Android界面美化,但是太深入的操作就不会了,那么下面我为大家介绍另一种风格的界面,使你的手机界面变的更加 ...

最新文章

  1. LeetCode简单题之重新分配字符使所有字符串都相等
  2. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
  3. Failed to initialize NSS library
  4. 夏意秋尽-08年1月
  5. threading模块使用_threading简介(创建多线程的两种方法)★
  6. unity 下一帧执行_理解Unity中的优化(三):协程(Coroutines)
  7. git推送密码_git 学习小记之记住https方式推送密码
  8. spring boot 三种入参
  9. 为什么要写this在访问成员变量的时候_C++幕后故事(一) --对象模型this指针调整...
  10. Android设置Alpha值实现图片渐变效果
  11. 服务器Raid数据恢复成功案例和raid 5数据恢复算法原理
  12. 前端的搬运仓库github
  13. cpu爆了怎么排查和处理_CPU飙高,系统性能问题如何排查?
  14. SFM图像三维重建(二)
  15. 夏至海报设计素材,都分享在这里了
  16. Do带你解析:原生APP与web APP的区别
  17. 数字IC设计学习笔记_Formality 形式验证
  18. 蒲公英内测托管:从隐私合规开始,让我们的数据安全流通
  19. CVPR 2021 审稿意见出了,你也许需要这份学术论文投稿与返修指南
  20. 南京理工大学matlab怎么弄,基于MATLAB/SimDriveline 的某型军用车辆 起步过程仿真研究...

热门文章

  1. jQuery load和unload函数使用
  2. MySQL替换函数REPLACE替换字符串方法
  3. 27. Remove Element[E]移除元素
  4. 转载几篇看过的几篇使用技术博文
  5. git pull 提示 There is no tracking information for the current branch
  6. linux log变色
  7. java开发注意事项
  8. Python 字典 get() 方法
  9. Python图片爬虫
  10. centos 挂载与卸载硬盘