2019独角兽企业重金招聘Python工程师标准>>>

因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新UI。如果子线程一直在运行,则子线程中的UI更新的函数栈 主线程无法获知,即无法更新

只有极少数的UI能,因为开辟线程时会获取当前环境,如点击某个按钮,这个按钮响应的方法是开辟一个子线程,在子线程中对该按钮进行UI 更新是能及时的,如换标题,换背景图,但这没有任何意义

UI操作并不是线程安全的,多线程更新UI会造成死锁,竞争条件等多种问题。iOS推荐UI操作在主线程中进行,避免出现crash等无法预知的问题。比如TableView的刷新,有可能线程a往模型数组中添加了数据并刷新tableView,tableView调用了- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section得知每组cell的个数,但是就在tableView调用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法的时候,线程b将模型数组里面的数据删除干净了,如果此时在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法里访问模型数组,就会出现数组越界,这在网络请求数据的时候很容易出现,一定要确定数据返回的block或者delegate是在哪个线程,如果是子线程一定要回主线程刷新UI。

转载于:https://my.oschina.net/jlongtian/blog/856995

为什么要在主线程更新UI?相关推荐

  1. 为什么Android必须在主线程更新UI?

    为什么Android必须在主线程更新UI? 站在各位大牛的肩膀上,谢谢! 正常情况下,Android需要在UI线程更新UI,然鹅,在特殊情况下,子线程也能更新UI不在讨论之列,可参考Android中子 ...

  2. 为什么 Android 必须在主线程更新 UI ?

    点击蓝字 关注我们 为什么Android必须在主线程更新UI? 站在各位大牛的肩膀上,谢谢! 正常情况下,Android需要在UI线程更新UI,然鹅,在特殊情况下,子线程也能更新UI不在讨论之列,这篇 ...

  3. 真的必须要在主线程更新UI吗?

    一般UI更新都会调用requestLayout 或者invalidate, 自定义view 也要如此 ???. @android.view.RemotableViewMethod public voi ...

  4. OC 主线程刷新UI

    在使用OC进行开发的时候,如果遇到报Thread线程错误(崩溃),那可能就是在进行UI操作的时候没有放在主线程中导致的! 在OC中将UI操作切换到主线程进行的方法如下: if ([NSThread i ...

  5. qt 一个线程接收数据 主线程更新界面 会造成界面退出 怎么解决_打造一个好产品...

    编辑导语:一个好的产品,关键在于产品经理和团队:产品经理对于产品如何理解以及产品更新迭代时的需求变化,产品如何实现更好的体验等等:本文作者分享了关于产品经理经常犯的七个问题,我们一起来看一下. 不管怎 ...

  6. Handler-接受子线程数据更新UI主线程;非主线程通信--HandlerThread

    一.定义 主要接受子线程发送的数据, 并用此数据配合主线程更新UI.           解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI ...

  7. Android,UI主线程与子线程

    在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Co ...

  8. Android Handler主线程和一般线程通信的应用分析

    Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进 ...

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

    消息机制,对于Android开发者来说,应该是非常熟悉.对于处理有着大量交互的场景,采用消息机制,是再好不过了.有些特殊的场景,比如我们都知道,在Android开发中,子线程不能更新UI,而主线程又不 ...

  10. android Handler更新UI

    android中经常需要更新界面某个元素的值,但是在主线程中是不可以直接更新主线程的值.这里推荐通过handler机制来更新值. 一Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主 ...

最新文章

  1. VTK:网格之AddCell
  2. Android__Context
  3. torchvision resize 指定生成图片的尺寸
  4. 高性能JavaScript(您值得一看)
  5. Java中ArrayList、Integer[]和int[]的相互转换
  6. [C++]##(两个井号)和#(一个井号)都是什么意思
  7. libcurl 发送邮件_libcurl smtp发送邮件附件大小限制问题
  8. python 编程实例
  9. javaweb零食商城系统设计与实现(ssm项目)(含论文和源码)
  10. 嵌入式C语言static关键字
  11. office和flash计算机课程,Powerpoint和Flash制作教学课件技巧
  12. R数据分析:样本量计算的底层逻辑与实操,pwr包
  13. 学生管理系统Element UI版
  14. linux硬盘对拷 再生龙,使用Clonezilla(再生龙)克隆Linux系统
  15. Python 中模拟键盘输入
  16. 生产环境RedisCPU飙高怎么办
  17. 解决虚拟机上ubuntu上安装搜狗拼音输入法无法使用的问题,系统是18.04的
  18. 解决java压缩图片内存溢出问题
  19. 第六十七篇:opencv中KeyPoint与point2f之间相互转换
  20. 传奇服务器包裹元宝数量显示,GOM传奇服务端测试记录元宝,传奇GM版本库测试区记录元宝数量教程...

热门文章

  1. 再见!热血活力的深圳
  2. 总是通过加班,来完成工作,那都是假象
  3. 你的努力,是否符合你的预期?
  4. request.setAttribute()怎么用的?
  5. vue怎么自己创建组件并引用_关于vue如何创建一个自定义组件(这是项目中经常得用的)...
  6. 姚聪 旷世_首款国产豪华品牌大型SUV,汉龙旷世品质气场100分! - 快讯
  7. python gif图 ctf_从两道CTF实例看python格式化字符串漏洞
  8. html基础—页面框架,前端基础——页面架构
  9. 力扣题目系列:1313. 解压缩编码列表
  10. mysql ibd文件还原_MySQL