博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开之在非UI线程中更新UI
阅读量:6973 次
发布时间:2019-06-27

本文共 1159 字,大约阅读时间需要 3 分钟。

当在非UI线程中更新UI(程序界面)时会出现例如以下图所看到的的异常:

Only the original thread that created a view hierarchy can touch its views.

那怎样才干在非UI线程中更细UI呢?

方法有非常多种。在这里主要介绍三种:

第一种:调用主线程mHandlerpost(Runnable r)方法。

        该方法中的Runnable对象会被会加入到mHandler所在线程的Message消息队列中,假设mHandler在主线程中则Runnable 对象中的run方法将会在主线程中运行。所以能够达到更新UI线程的目的。

提示:

        Handler另一个与之类似的方法postDelayed(Runnable r, long delayMillis),该方法会在进行指定delayMillis时间的延迟之后将runnable对象加入到mHandler所在的线程中。

例如以下方法:

new Thread(){	@Override	public void run() {		// TODO Auto-generated method stub		showToastByRunnable(MainActivity.this, "", 3000);	}	}.start();
/** * 在非UI线程中使用Toast * @param context 上下文 * @param text 用以显示的消息内容 * @param duration 消息显示的时间 * */private void showToastByRunnable(final Context context, final CharSequence text, final int duration) {    Handler handler = new Handler(Looper.getMainLooper());    handler.post(new Runnable() {        @Override        public void run() {            Toast.makeText(context, text, duration).show();        }    });}

另外一种:通过handler向主线程发送消息的机制该更新UI

第三种:在须要更新UI的代码行后加Looper.prepare();Looper.loop();两句话就可以。如:

new Thread(){	@Override	public void run() {		// TODO Auto-generated method stub		txtRotation.setText("在非UI线程中更新UI!");			Looper.prepare();		Looper.loop();		}	}.start();

你可能感兴趣的文章
在Web应用和IntelliJ IDEA中使用Spring框架
查看>>
MongoDB索引相关文章-摘自网络
查看>>
2017Windows下安装pip
查看>>
用JAVA发送一个XML格式的HTTP请求
查看>>
进击的 JavaScript(一) 之 类型转换
查看>>
Android内存优化
查看>>
DECIAML字段字节计算
查看>>
电梯媒体吵架再升级,江南春张继学隔空喊话!
查看>>
angular组件版本管理器
查看>>
问题MySQL server has gone away
查看>>
iOS的Cookie存取看我绝对够!!
查看>>
Java工程师如何在1个月内做好面试准备?
查看>>
PAT A1078
查看>>
少走弯路,给Java 1~5 年程序员的建议
查看>>
纯链式golang http请求库, 支持HTTP代理
查看>>
类的扩充 js中面向对象的技术
查看>>
css 3D动画
查看>>
一名3年工作经验的java程序员应该具备的职业技能
查看>>
机器喵之红黑树(一)
查看>>
短网址(short URL)系统的原理及其实现
查看>>