博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 主线程消息队列更新View
阅读量:6899 次
发布时间:2019-06-27

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

hot3.png

主线程消息队列提供的方法

基本上只要继承自View的控件,都具有消息队列或者handler的一些处理方法,下面是一些handler方法以及被View封装了的方法,其底层用的基本都是handler的api。

223955_gmeT_2256215.jpg

举例:查看postDelay的定义

android.view.View

 public boolean postDelayed(Runnable action, long delayMillis) {        final AttachInfo attachInfo = mAttachInfo;        if (attachInfo != null) {            return attachInfo.mHandler.postDelayed(action, delayMillis);        }        // Assume that post will succeed later        ViewRootImpl.getRunQueue().postDelayed(action, delayMillis);        return true;    }

通常消息更新的用法如下

方法一

//如果需要延迟更新new Handler().postDelay(new Runnable(){    public void run()  {  //在主线程更新数据和UI  }  },2*1000);

方法二

//方案二TextView testTv = (TextView)findViewById(R.id.test_view_handler_tv);testTv.postDelay(new Runnable(){    public void run()  {  //在主线程更新数据和UI  }  },2*1000);

两种方案比较,显然第二种更加经济环保。

关于runOnUIThread

Activity中也有一个方法,这个方法发送消息到UI线程,runOnUIThread(Runnable action);

先来看看他的源码实现

java.app.Activity

 public final void runOnUiThread(Runnable action) {        if (Thread.currentThread() != mUiThread) {            mHandler.post(action);        } else {            action.run();        }    }

 

很显然,当方法运行在UI线程上时立即执行,否则发送消息到UI线程之后再执行。

runOnUIThread又为我们省却了创建Handler的异步,比如在多线程中,在子线程中再也不用使用handler发送消息了,完全可以在子线程中调用这个方法来“更新”UI了(注意哦,这里实际上会发送消息和执行代码段到UI线程,并不是在子线程上更新)

Activity.runOnUiThread不可以发送延迟执行的方法,为此我们需要定制可以延迟的runOnUiThread方法

Activity运行时会依附于Window之上,并且在Activity中默认具有根DecorView存在,这个默认根视图无法被覆盖,但他永远存在,座位一个View,为了“多快好省”的原则,我们应该充分利用这个DecorView

如下就是自定义的runOnUiThread:

public void runOnUiThread(Runnable action,int delayMillis) {	getWindow().getDecorView().postDelayed(action, delayMillis);}

 

 

 

try doing it!

转载于:https://my.oschina.net/ososchina/blog/337929

你可能感兴趣的文章
java反射简单例子
查看>>
spring-session redis集群配置步骤总结
查看>>
Broadcom 4365(如:Dell vostro 3460)笔记本wifi无法使用解决办法
查看>>
LVS/DR+heartbeat实现高可用负载均衡服务
查看>>
单臂路由的原理及实验
查看>>
web前端开发中浏览器兼容问题(六)
查看>>
程序员应该怎样?
查看>>
离线快速部署Mirantis Openstack 9.0
查看>>
至少我还有腿
查看>>
怎样设计才能让文字排版更好看(三)
查看>>
【转】panabit+syslog打造中小型企业流量监控系统
查看>>
选高效服务器要精挑细选!擦亮双眼,拒绝杯具!
查看>>
Centos 7.1 RDO 安装 Liberty 问题及解决办法
查看>>
python制作的食物买卖存量计算程序
查看>>
yum命令——Linux下只下载不安装
查看>>
黑马程序员——集合篇
查看>>
memcached笔记
查看>>
CentOS yum安装Oracle10g
查看>>
MDT 2013 从入门到精通之SQL New MDT Database
查看>>
无线基础
查看>>