解决安卓UI刷新卡屏,只显示最后一处刷新的问题
---恢复内容开始---
错误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
能力有限,有些地方表述不当,希望大家不吝赐教
---恢复内容结束---
解决安卓UI刷新卡屏,只显示最后一处刷新的问题的更多相关文章
- 安卓 apk 嵌入H5页面只显示部分
安卓 apk 嵌入H5页面只显示部分(有空白页出现) 解决方案 没有加载的是js部分,需要在安卓那边加上一串代码 webView.getSetting().setDomStorageEnabled(t ...
- 安卓开发ScrollView嵌套ListView只显示一行
在用列表控件做一个“更多功能”的界面的时候 <?xml version="1.0" encoding="utf-8"?> <ScrollVie ...
- EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题
在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加 实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...
- win10 开机黑屏只显示鼠标
最靓,win10开机黑屏,网上试了很多办法没有解决,花了3个小时终于解决了,现在介绍一下方法. 首先,在黑屏模式下进入任务管理器,文件=>运行新任务=>Explorer.exe 此时桌面已 ...
- Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施
本文写于2018-02-10.截至到此文完成时,没有已知的方法可以让OBS在Wayland环境下正常工作. 解决方法 放弃使用Wayland,改用X Window 在Wanyland上录制屏幕,可以使 ...
- WPF Popup全屏 弹出方法。解决只显示75%的问题。
WPF Popup全屏 弹出方法.解决只显示75%的问题. WPF 中 Popup 有一个特点.当Popup的高度超过屏幕的75%的时候,只显示75%的高度. 如下代码: <Window x ...
- 解决:mui 的 选项卡 + 下拉刷新 功能,在其中嵌入 iframe 后,在 iphone 的情况下,iframe 的内容不能滚动,只显示第一屏内容。
我所遇到的情况是,使用 mui 的 选项卡 + 下拉刷新 功能时,其中有2个页面是嵌入了别的网站的页面,而别个几个是通过 ajax 加载本网站的数据.然后 在其中嵌入 iframe 后,在 iphon ...
- win7系统的右键菜单只显示一个白色框不显示菜单项 解决办法
如上图所示,桌面或其他大部分地方点击右键菜单,都只显示一个白色框,鼠标移上去才有菜单项看,并且效果很丑 解决办法: 计算机-右键-属性-高级-性能-设置-视觉效果-淡入淡出或滑动菜单到视图,将其前面的 ...
- ScrollView中嵌套GridView,ListView只显示一行的解决办法
转载:http://blog.csdn.net/luohai859/article/details/39347583 关于为什么只显示一行,个人理解是:如果单独使用GridView和ListView, ...
随机推荐
- Mybatis tinyint(1)自动转boolean
使用Mybatis查询tinyint(1)字段数据,返回值为Map类型,那么tinyint(1)的数据默认会转化为boolean类型数据.解决方案: 1.使用ifnull(column, 0)处理该 ...
- 关于for循环
1.普通for循环 (遍历数组的索引值(下标),边界可以自己划定) var arr = [10, 20, 30];for(var i=0; i<arr.length; i++) console. ...
- Oracle实用操作
查询用户下所有表:select * from tab; 删除表: drop table 表名; 但是删除表后还是会查询到BIN开头的垃圾表,drop后的表存在于回收站: 清空回收站所有表: purg ...
- Android字符串判断是否包含中文
// 判断一个字符是否是中文 public boolean isChinese(char c) { return c >= 0x4E00 && c <= 0x9FA5;// ...
- python中 ImportError: No module XXX的解决办法
python是通过过使用:sys.path来获取模块的路径的,返回的但是一个list 向python模块路径中加入自己的模块:sys.path.append(os.path.abspath('%s.. ...
- WIN7无法访问共享打印机及文件的解决办法
故障: 在网上邻居上能看到对方的电脑名字,双击进入的时候弹出问题.出现“用户账户限制”或“未授予用户在计算机上的请求登陆类型”的问题,这说明我们的局域网和网络是畅通的,问题的根源就在电脑的安全设置上. ...
- nginx rewrite 指令
ginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else. 该模块需要PCRE支持,应在编译nginx时指定PCRE源码目录, nginx安装方 ...
- mongodb认识
MongoDB安装 一.软件的获取地址 1.使用本安装文档提供的安装软件 本安装文档提供的软件为window版本的64位MongoDB的安装包 2.在官网上下载所需的安装软件 下载地址:https:/ ...
- 一个简单好用的日志框架NLog
之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog. 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4n ...
- vue路由1:基本使用
路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容.Home按钮 => home 内容, ...