runOnUiThread和Handler机制更新UI
来源:互联网 发布:刷推广注册软件 编辑:程序博客网 时间:2024/06/05 14:20
一.Handler机制更新UI
1)定义了一个整型常量 UPDATE_TEXT,用于表示更新 TextView 这个动作。然后新增一个 Handler 对象,并重写父类的 handleMessage 方法,在这里对具体的 Message进行处理。如果发现 Message 的 what 字段的值等于 UPDATE_TEXT,就将 TextView 显示的内容改成Hello World。
private static final int UPDATE_TEXT = 1; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: text.setText("Hello World"); break; default: break; } } };
2)创建一个 Message(android.os.Message)对象,并将它的 what 字段的值指定为 UPDATE_TEXT,然后调用 Handler 的 sendMessage()方法将这条Message 发送出去。很快,Handler 就会收到Message,并在 handleMessage()方法中对它进行处理。注意此时 handleMessage()方法中的代码就是在主线程当中运行的了,所以我们可以放心地在这里进行 UI 操作。接下来对 Message 携带的 what 字段的值进行判断,如果等于UPDATE_TEXT,就将 TextView 显示的内容改成 Hello World。
new Thread(new Runnable() { @Override public void run() { Message message = new Message(); message.what = UPDATE_TEXT; handler.sendMessage(message); // 将Message对象发送出去 } }).start();
ps:Android 中的异步消息处理
Android 中的异步消息处理主要由四个部分组成,Message、Handler、MessageQueue 和
Looper。
- Message
Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。使用Message 的 what 字段,除此之外还可以使用 arg1 和 arg2 字段来携带一些整型数据,使用 obj 字段携带一个 Object 对象。 - Handler
Handler 顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消息一般是使用 Handler 的 sendMessage()方法,而发出的消息经过一系列地辗转处理后,最终会传递到 Handler 的 handleMessage()方法中。 - MessageQueue
MessageQueue 是消息队列的意思,它主要用于存放所有通过 Handler 发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个 MessageQueue对象。 - Looper
Looper 是每个线程中的 MessageQueue 的管家,调用 Looper 的 loop()方法后,就会进入到一个无限循环当中,然后每当发现 MessageQueue 中存在一条消息,就会将它取出,并传递到 Handler 的 handleMessage()方法中。每个线程中也只会有一个 Looper 对象。
二.runOnUiThread更新UI
runOnUiThread更新UI更加方便简洁,这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作时发布到事件队列的UI线程。
runOnUiThread(new Runnable() { @Override public void run() { text.setText("Hello World"); } });
阅读全文
1 0
- runOnUiThread和Handler机制更新UI
- UI更新方法Handler和runOnUiThread
- 更新UI操作,Handler与runOnUiThread
- 使用Thread+Handler或runOnUiThread更新UI
- android 更新界面视图 Handler和runOnUiThread
- android 更新界面视图 Handler和runOnUiThread
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- 更新UI的两种方法——handler和runOnUiThread()
- Android 更新UI的两种方法——handler和runOnUiThread()
- Swift 如何嵌入OC文件以及Cocoapods管理的swift项目导入OC第三方库
- 更改Hbase的rootdir报错
- 安卓、Java 获取当天星期几
- 寒江独钓键盘过滤卸载蓝屏
- linux中压缩及解压tar,bz2,gz,tar.bz2,tar.gz
- runOnUiThread和Handler机制更新UI
- aop and tx
- SFTP报错:com.jcraft.jsch.JSchException: session is down 上传失败
- npm一些常用命令——笔记
- C++的模板为什么要在头文件(.h)中实现?
- Python中元组,列表,字典的区别
- linux文件目录结构,及用户管理
- Hadoop集群配置
- 自动部署Tomcat错误排除