android刷新界面的几种方法,Android UI更新的几种方法
前言
在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更新的几种方法相关推荐
- 仿联想商城laravel实战---5、无刷新的增删改查(动态页面更新的三种方式(html))...
仿联想商城laravel实战---5.无刷新的增删改查(动态页面更新的三种方式(html)) 一.总结 一句话总结: 直接js增加删除修改html 控制器直接返回处理好的页面 用双向绑定插件比如vue ...
- sumproduct函数的使用方法 PHP强制更新图片缓存的方法
本篇文章主要介绍了"sumproduct函数的使用方法 php强制更新图片缓存的方法",主要涉及到sumproduct函数的使用方法方面的内容,对于PHP教程感兴趣的同学可以参考一 ...
- android更新UI(界面)的方法;android刷新界面数据的方法;android定时器更新界面
Android中常常需要对UI界面进行更新.下面我将介绍的是定时更新UI的几种方法: 一.定时器更新UI的两种方法 1.使用Timer的方式 private Timer timer=new Timer ...
- Kotlin 开发Android app(十八):线程Thread和UI更新
多线程的好处是不言而喻的,它能帮我们刚更多的事情,同时干不同的事情在程序设计中是经常出现的,这种时候我们使用的是线程. 在Kotlin 中,使用的还是原先java 的那一套,用的还是Thread ,可 ...
- 一种屏蔽win10指定更新补丁的设置方法
WIN10自动更新关闭,系统又会自动打开, 系统补丁安装上除了系统空间减少外,导致某些软件运行异常是大件事,需要手动去"程序管理"删除卸掉新安装好的补丁,重启系统,软件运行正常了: ...
- android中实现view的更新有两组方法
android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了 ...
- android生命周期方法,Android零基础入门|Activity状态和生命周期方法
原标题:Android零基础入门|Activity状态和生命周期方法 前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还 ...
- Android常见界面布局
第2章 Android常见界面布局 第2章 Android常见界面布局 2.1 View视图 2.2 界面布局编写方式 2.2.1 在XML文件中编写布局 2.2.2 在Java代码中编写布局 2.3 ...
- android 自动补全方法,Android零基础入门|自动完成文本框AutoCompleteTextView
原标题:Android零基础入门|自动完成文本框AutoCompleteTextView 上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用. ...
- android10桌面布局好看,让你的Android手机界面布局更好看
机友是否觉得你的Android界面布局不够好看?想换一种手机界面?也许很多朋友都能够很简单Android界面美化,但是太深入的操作就不会了,那么下面我为大家介绍另一种风格的界面,使你的手机界面变的更加 ...
最新文章
- LeetCode简单题之重新分配字符使所有字符串都相等
- 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
- Failed to initialize NSS library
- 夏意秋尽-08年1月
- threading模块使用_threading简介(创建多线程的两种方法)★
- unity 下一帧执行_理解Unity中的优化(三):协程(Coroutines)
- git推送密码_git 学习小记之记住https方式推送密码
- spring boot 三种入参
- 为什么要写this在访问成员变量的时候_C++幕后故事(一) --对象模型this指针调整...
- Android设置Alpha值实现图片渐变效果
- 服务器Raid数据恢复成功案例和raid 5数据恢复算法原理
- 前端的搬运仓库github
- cpu爆了怎么排查和处理_CPU飙高,系统性能问题如何排查?
- SFM图像三维重建(二)
- 夏至海报设计素材,都分享在这里了
- Do带你解析:原生APP与web APP的区别
- 数字IC设计学习笔记_Formality 形式验证
- 蒲公英内测托管:从隐私合规开始,让我们的数据安全流通
- CVPR 2021 审稿意见出了,你也许需要这份学术论文投稿与返修指南
- 南京理工大学matlab怎么弄,基于MATLAB/SimDriveline 的某型军用车辆
起步过程仿真研究...