博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么说invalidate()不能直接在线程中调用
阅读量:6711 次
发布时间:2019-06-25

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

 

1、为什么说invalidate()不能直接在线程中调用?

2、它是怎么违背单线程的?
3、 ui为什么说不是线程安全的?
4、android ui操作为什么一定要在UI线程中执行?

 

1、为什么说invalidate()不能直接在线程中调用?

答:
    Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在非UI主线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。例如:在非UI线程中调用invalidate会导致线程不安全,也就是说可能在非UI线程中刷新界面的时候,UI线程(或者其他非UI线程)也在刷新界面,这样就导致多个界面刷新的操作不能同步,导致线程不安全
2、它是怎么违背单线程的?
答:一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。由于只有UI线程更新界面所以说
Android是单线程模型。   一个Android程序创建之初,一个Process呈现的是单线程模型--即Main Thread,在非主线程(UI线程)外调invalidate()刷新界面出现异常,即是说用其他的线程更新UI,android中是不被允许的。
3、android ui为什么说不是线程安全的?
答:android UI 中提供invalidate()来更新界面,而invalidate()方法是线程不安全。
4、android ui操作为什么一定要在UI线程中执行?
答:UI主线程是更新UI界面的,更新了界面才能看到运行的效果。
     再者Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。

 

FROM:http://chenjinhua1595515.blog.163.com/blog/static/21583214720140834012400/

转载地址:http://szalo.baihongyu.com/

你可能感兴趣的文章
mesos+marathon+zookeeper的docker管理集群亲手搭建实例(环境Centos6.8)
查看>>
你应了解的4种JS设计模式
查看>>
垃圾收集器Serial 、Parallel、CMS、G1
查看>>
mongodb基本概念解析
查看>>
前端学HTTP之网关、隧道和中继
查看>>
安卓手机使用Fiddler抓获HTTPS报文方法
查看>>
使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡
查看>>
Jenkins部署Web项目到远程tomcat(通过jenkins插件)
查看>>
数据机构与算法-数据结构的一些基本概念
查看>>
Google开源基于Tensorflow的NLP框架重大升级
查看>>
正则表达式工具RegexBuddy使用教程
查看>>
异常体系
查看>>
OpenCV【2】---读取png图片显示到QT label上的问题
查看>>
Fedora 25-64位操作系统中安装配置Hyperledger Fabric过程
查看>>
.Net Core 部署到 CentOS7 64 位系统中的步骤
查看>>
【js中数组和字符串的相互转换】
查看>>
node.js之web开发 koa入门
查看>>
混淆矩阵
查看>>
生成1000万行7位数字文件(编程珠玑)
查看>>
初识 systemd
查看>>