大家都了解的子线程不能更新UI,所以普通青年比方我,遇到耗时操作用到线程时。不得不立刻想到了用handler传递来解决UI更细的问题。

普通青年的做法:

方案:使用Thread+handler方式,handler传递信息实现Ui的更新

new Thread( new Runnable() {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
}).start();

Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
myBounceView.invalidate();
break;
}
super.handleMessage(msg);
}
};

逼格稍高的普通青年做法:

使用java.util.Timer, java.util.TimerTask,
android.os.Handler组合,实现定时的更新UI

private Handler handler = new Handler();  

    private Runnable myRunnable= new Runnable() {
public void run() { if (run) {
handler.postDelayed(this, 1000);
count++;
}
tvCounter.setText("Count: " + count); }
};

或者handler.postDelayed(runable,1000);

写道这里有必要提一下。handler.postDelay尽管看起来是子线程的形式,但事实上质上不是工作在子线程,仅仅是以子线程的形式执行罢了。这也相同呼应了开头说的那句话:UI更新必须在主线程进行。

暂且叫做文艺青年的更新UI做法:

runOnUiThread
new Thread(new Runnable() {

@Override
public void run() {
final String avatarUrl = ((DemoHXSDKHelper)HXSDKHelper.getInstance()).getUserProfileManager().uploadUserAvatar(data);
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
if (avatarUrl != null) {
Toast.makeText(UserProfileActivity.this, getString(com.boyuyun.chatui.R.string.toast_updatephoto_success),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(UserProfileActivity.this, getString(com.boyuyun.chatui.R.string.toast_updatephoto_fail),
Toast.LENGTH_SHORT).show();
} }
}); }
}).start();

这是使用demo里的一段代码,也就是他让我開始关注runOnUIThread,该方法是activity的方法,使用是注意指明context。以子线程的形式执行在主线程,从而实现UI更新

关于子线程更新UI的更多相关文章

  1. Android子线程更新UI的方法总结

    版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...

  2. [Android学习笔记]子线程更新UI线程方法之Handler

    关于此笔记 不讨论: 1.不讨论Handler实现细节 2.不讨论android线程派发细节 讨论: 子线程如何简单的使用Handler更新UI 问题: android开发时,如何在子线程更新UI? ...

  3. 子线程更新UI界面的2种方法

    一.一般我们都会在子线程完成一些耗时的操作. 1.Android中消息机制: 2.知识点: Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队, ...

  4. OkHttp3几个简单的例子和在子线程更新UI线程的方法

    okHttp用于android的http请求.据说很厉害,我们来一起尝尝鲜.但是使用okHttp也会有一些小坑,后面会讲到如何掉进坑里并爬出来. 首先需要了解一点,这里说的UI线程和主线程是一回事儿. ...

  5. Android可以子线程更新UI?

    初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情! 但是,这个是针对普通的view做的限制,而TextureView,Su ...

  6. android子线程更新UI

    参考:https://www.cnblogs.com/joy99/p/6121280.html 子线程是不能直接更新UI的.Android实现View更新有两组方法,分别是invalidate和pos ...

  7. Android子线程更新UI成功

    android子线程更新UI成功 今天在写demo的时候,在子线程中更新UI,发现更新成功,记录一下. protected void onCreate(Bundle savedInstanceStat ...

  8. Android开发——实现子线程更新UI

    Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用子线程来执行 ...

  9. Qt 子线程更新Ui

    最近做练习,写一个Qt版的飞机大战,需要用子线程更新UI,发现Qt子线程不能更新Ui,否则程序会崩溃.在网上百度了下,说是需要在子线程自定义信号,然后在线程回调的run()函数里发射信号,主线程连接信 ...

  10. Android通过子线程更新UI的几种方式

    一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:M ...

随机推荐

  1. grunt任务自动管理

    Grunt管理工具使用: 一.模块安装 1.在项目的根目录里新建package.json文件,形式如下,指定依赖的库以及版本信息. 2.然后在项目根目录下,执行 npm install ,安装json ...

  2. Input类型是checkbox时checked属性获取

    记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...

  3. 【深度学习笔记】(二)基于MNIST数据集的神经网络实验

    一.介绍 MNIST(Mixed National Institute of Standards and Technology database)是网上著名的公开数据库之一,是一个入门级的计算机视觉数 ...

  4. Linux下安装ActiveMQ CPP

    ActiveMQ CPP ActiveMQ CPP是用C++语言访问ActiveMQ的客户端开发库,也称cms(cpp message service),安装cms开发库需要先安装一些基础库. 如下: ...

  5. [转载] 基于Dubbo的Hessian协议实现远程调用

    转载自http://shiyanjun.cn/archives/349.html Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行 ...

  6. radis学习总结

    Redis与Memcached的比较. 1.Memcached是多线程,而Redis使用单线程. 2.Memcached使用预分配的内存池的方式,Redis使用现场申请内存的方式来存储数据,并且可以配 ...

  7. Shiro SpringMVC 非maven HelloWorld

    项目用到Shiro就从网上找一些案例看看吧,结果看了很多都是maven的,没有办法就自己弄了一个.废话不多说,原理自己找开始上菜. 配置web.xml <?xml version="1 ...

  8. C# winform 实现图片轮播

    作为一个C#winform刚刚入门的我  觉得这可能是初学者都会遇到的  我自己也觉得很神奇 首先 窗体里有一个Button按钮,和一个pictureBox 图片框 定义一个线程方法 /// < ...

  9. 向maven中添加本地jar包

    <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java& ...

  10. 大神博客链接系列---C#SubSonic3.0搭建ORM

    一.C#框架 C#ORM框架: SubSonic3.0制作ORM--- http://www.cnblogs.com/EmptyFS/p/3659679.html