Android 子线程无法刷新UI界面
问题:在Android开发中,子线程无法直接更改UI界面视图的刷新
这个时候 Handler 起到了至关重要的作用.
简单来说 , Handler就是用来传递消息的.
Handler可以当成子线程与主线程的消息传送的纽带。
在安卓开发中,在子线程中无法刷新UI,是因为UI在子线程中刷新的话,是不安全的,如 多个线程刷新UI,会造成UI更新冲突,这样是不安全的。
所以,Handler的作用就来了,子线程可以通过Handler来将UI更新操作切换到主线程中执行. 话不多说 上代码:
//这里需要实现 View.OnClickListener 接口
public class Test extends AppCompatActivity implements View.OnClickListener { TextView textView; Thread myThread; Button buttonStart @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //获取文本视图
textView = findViewById(R.id.textView); //创建线程
myThread = new TimeThread(); //获取开始按钮
buttonStart = findViewById(R.id.but_start); //开始按钮单击事件
buttonStart.setOnClickListener(this); }
//重写onClick方法
@Override
public void onClick(View v) {
//判断当前按的控件
switch (v.getId()) {
case R.id.but_start:
//开启线程
myThread.start();
break;
default:
break;
}
} } public class TimeThread extends Thread {
//重写run方法
@Override
public void run() {
super.run();
//一直循环
while (true) {
try {
//每秒执行一次
Thread.sleep(1000);
Message msg = new Message();
//
msg.what = 1;
//获取当前系统时间
Date date= new Date();
SimpleDateFormat dateFormat = new
SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String now= dateFormat.format(date);
//把时间放入Message
msg.obj = now ;
//由Message传递给Handler 处理
myHandler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
break; }
}
}
} private Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
//更新文本框里的值
textView.setText((String)msg.obj);
break;
default:
break;
}
}
};
Android 子线程无法刷新UI界面的更多相关文章
- Android子线程中更新UI的4种方法
方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage ...
- 老问题:Android子线程中更新UI的3种方法
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...
- Android 子线程中进行UI操作遇到的小问题
今天在学习<第一行Android代码>第9章-子线程进行UI操作时遇到了一些问题. 代码是这样的: ... import java.util.logging.Handler; ... pu ...
- Android 子线程 UI 操作真的不可以?
作者:vivo 互联网大前端团队- Zhang Xichen 一.背景及问题 某 SDK 有 PopupWindow 弹窗及动效,由于业务场景要求,对于 App 而言,SDK 的弹窗弹出时机具有随机性 ...
- 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区
开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...
- 03_主线程联网问题&ANR&子线程不能修改UI
如果不使用HAXM,恐怕网页源码查看器无法获取servlet的源码.初步猜测是安卓模拟器运行速度太慢了.如果CPU不支持VT-x的话,HAXM是安装不上的.所以可以先开启VT-x. 可以参考几篇文章h ...
- Android子线程真的不能更新UI么
Android单线程模型是这样描述的: Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行 如果在其它线程访问UI线程,Android提供了以下的方式: Activity.run ...
- Android子线程更新UI的方法总结
版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...
- android子线程更新UI
参考:https://www.cnblogs.com/joy99/p/6121280.html 子线程是不能直接更新UI的.Android实现View更新有两组方法,分别是invalidate和pos ...
随机推荐
- 剑指Offer-快速排序
剑指Offer上的快速排序的Partition函数与我在数据结构书上学到的不一样,因此就想要探索下这两种不同的处理方式. 1.基本思想 快速排序的基本思想是基于分治法.在待排序表L[1...n]中任取 ...
- 数组遍历 forEach 方法
数组的遍历 遍历数组,将数组中的所有元素都取出来. 使用for 循环执行数组的索引(length-1)相同的次数. var arr=["1", "5", &qu ...
- python起步--windows系统下安装python解释器和PyCharm
参考教程: 1)https://www.runoob.com/w3cnote/pycharm-windows-install.html 2)https://blog.csdn.net/c_shell_ ...
- Scratch的入门笔记
最近发现人工智能和编程在小学开始普及,由于好奇,所以开始去了解儿童编程方面的知识,希望增加一些儿童编程教育相关的知识面,跟上发展潮流. Scratch是一款由麻省理工学院的“终身幼儿园团队”(Life ...
- Python3学习笔记(十四):可迭代对象、迭代器和生成器
记得在刚开始学Python的时候,看到可迭代对象(iterable).迭代器(iterator)和生成器(generator)这三个名词时,完全懵逼了,根本就不知道是啥意识.现在以自己的理解来详解下这 ...
- Linux命令-文件传输
Linux命令-文件传输 Linux lprm命令 Linux lprm命令用于将一个工作由打印机贮列中移除 尚未完成的打印机工作会被放在打印机贮列之中,这个命令可用来将常未送到打印机的工作取消.由于 ...
- Codeforces 482E ELCA (LCT)
题目链接 http://codeforces.com/contest/482/problem/E 题解 T2智商题T3大LCT题,我一个也不会= = CF的标算好像是分块?反正现在LCT都普及了就用L ...
- Hibernate持久化类规则
注意事项: 提供无参的构造方法,因为在hibernate需要使用反射生成类的实例 提供私有属性,并对这些属性提供公共的setting和getting方法,因为在hibernate底层会将查询到的数据进 ...
- 32位下操作mongodb心得
本文出处:http://blog.csdn.net/chaijunkun/article/details/7236911,转载请注明. 随着互联网的变革,互联网的内容生成方式也逐渐地从网站生成转为用户 ...
- [论文理解] Learning Efficient Convolutional Networks through Network Slimming
Learning Efficient Convolutional Networks through Network Slimming 简介 这是我看的第一篇模型压缩方面的论文,应该也算比较出名的一篇吧 ...