解决安卓UI刷新卡屏,只显示最后一处刷新的问题
2024-10-12 20:34:14
---恢复内容开始---
错误1
安卓的机制决定了只有UI线程(也就是主线程)才能更新UI界面
否则会导致UI界面混乱的问题
这就说明了在new Thread中直接showImage是会报“出现非主线程更新界面”的错误
错误2
尝试在一次点击事件中多次更新UI界面 或者 妄想在死循环中一直更新UI界面,会导致UI堵塞,如下图所示
错误3
这里正解是通过Android的Handler机制,在Runnable 中持续跟新UI,但是想用死循环在Runnable中的run 方法里持续显示,会出现错误2的问题
正解
1.创建全局变量 public Handler handler = new Handler();
2.在需要更新UI 界面的地方创建一个线程
new Thread(){
@Override
public void run(){//*********}
}
3.在run地方用handler的post方法,注意post()里应该传入一个Runnable对象,我们在创建时可以重新创建
4.在Runnable中重写run方法,在run方法里添加showImage,点击运行,完成了在线程跟新UI界面的操作
5.如果想持续更新UI线程,在showImage()后面添加 handler.postDelayed()方法, 方法中第一个参数传入的是Runnable对象,第二个为延时时长
这里我的Runnable对象传入的this,就完成了持续更新界面的操作
具体代码如下
button_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
isRunning = true;
JNImethod(outMat1.getNativeObjAddr(),outMat2.getNativeObjAddr());
new Thread(){
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run()
{ showMatImage(outMat1, outMat2); //执行时间在4ms左右
handler.postDelayed(this, 100);
}
});
}
}.start();
}}); 我是在一个"开始"点击事件里添加的持续跟新UI界面的操作
我是通过慕课网上的视频学习做成的 传送门:https://www.imooc.com/learn/267
能力有限,有些地方表述不当,希望大家不吝赐教
---恢复内容结束---
最新文章
- 找出数组中从未出现的最小正整数java实现
- 北大poj- 1067
- jquery的toFixed方法的正确使用
- web组件
- sudo: ./sd_fusing.sh:找不到命令
- SVN查看提交日志的命令
- 关于driver_register做了些什么
- C#中使用ref 和 out 的一点认识
- sql server 2008 把远程的数据库的数据转移到本地数据数据库里
- C#方法有关内容的总结--C#基础
- nginx的location配置root、alias用法和区别
- Alpha 事后诸葛亮(团队)
- git小技巧
- 2018年Java生态行业报告
- SpringCloud和Springboot
- github个人心得
- 小程序篇- data 数据绑定
- 牛客练习赛41 B-666RPG
- 20155339平措卓玛 Exp2 后门原理与实践
- 《转载》Linux服务之搭建FTP服务器&;&;分布式文件服务器的比较
热门文章
- 更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9
- 【Tools】-NO.93.Tools.5.pyCharm-【pyCharm 安装与破解配置】-
- IDEA eclipse转maven
- vue-amap | 基于 Vue 2.x 与高德的地图组件
- centos----------防火墙firewalld和iptables
- asp.net 导出excel--NPOI
- python assert断言函数
- eclipse无法断点调试JDK源码的问题
- Centos 编译 安装 criu
- SQL语句汇总(二)——数据修改、数据查询