首页 > 其他分享 >「Android面试」Android 子线程为什么直接更新UI?

「Android面试」Android 子线程为什么直接更新UI?

时间:2024-08-08 19:18:39浏览次数:10  
标签:ViewRootImpl tv UI 线程 Android xadd

  本文将从子线程不能更新UI的直接原因、根本原因、Android如何做到限制以及子线程该如何正确更新UI四个方向回答问题。

【直接原因】在子线程中更新UI会怎样?

程序会出现以下错误: Only the original thread that created a view hierarchy can touch its views.

 

【根本原因】看到问题的本质(根本原因)

多线程操作UI是不安全的,那么为什么不安全?..

假设子线程能够更新UI,现在有个TextView显示数字1,我们现在需要对这个textview的现在的数字加1显示2,即 tv.text = tv.text +1 

 tv.text =  (tv.text.toString().toIntOrNull()?:0 + 1).toString()

我们把这个模型简化,这个计算类似于 x = x +1 的操作

x = x +1

那么证明 x = x +1不是线程安全的也就证明多线程操作  tv.text = tv.text +1 也不是安全的

标签:ViewRootImpl,tv,UI,线程,Android,xadd
From: https://www.cnblogs.com/xqz0618/p/18227049

相关文章

  • NGUI扩展模块:Unity-NGUIExtension
    在Unity3D开发过程中,NGUI是一个强大的UI框架,它提供了一系列的扩展模块来增强我们的用户体验和开发效率。Unity-NGUIExtension是一系列NGUI的扩展模块,这些模块能够为我们的Unity项目带来额外的功能和优化。模块概览UIShaderSpriteUIShaderSprite模块允许我们在NGUI的图集(a......
  • 关于java连接数据库时提示异常java.sql.SQLException: No suitable driver found for
    当我们测试一个新的数据库服务时,需要使用对方提供jdbc驱动来连接数据库,有时候简单的写个demo去连接,发现提示异常:java.sql.SQLException:Nosuitabledriverfoundforjdbc:jdbc:nuuv://10.1.8.99:8832/xxoo比如有以下程序连接数据库测试:publicstaticvoidmain(String[]a......
  • 基于深度学习网络的人员行为视频检测系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  2.算法涉及理论知识概要       基于GoogLeNet深度学习网络的人员行为视频检测系统是一个高度复杂的计算机视觉应用,它利用深度神经网络的强大功能来识别和分类视频中的人员行为。GoogLeNet,也称为......
  • 都2024年了,不会还有人不知道怎么安装最新版Android studio吧?
    目录JDK安装与配置一、下载JDK二、JDK安装三、JDK的环境配置四、JDK的配置验证Androidstudio安装Androidstudio连接手机真机调试(以华为鸿蒙为例)一、新建一个android项目二、进入项目面板三、配置AndroidStudio四、安装手机驱动程序五、连接手机六、运行程序......
  • Android之APK 瘦身
    目录1.移除不必要的资源2.优化代码3.分割APK4.使用资源压缩工具5.优化依赖库6.优化资源加载7.使用动态特性模块8.使用工具分析和优化优化和减小APK文件的大小可以提升应用的下载速度和用户体验。以下是一些常见的APK瘦身方法:1.移除不必要的资源删除未使用的资源:......
  • BUG: 传输的uicode码转汉字显示部分错误
    1.BUG描述pc下发文本信息,采用unicode编码形式,下位机单元接收后,需要将其解码成utf-8的编码形式显示出来,但是发现文本首部和尾部出现乱码。2.BUG原因原因很简单,解码的时候尾部和首部没有对齐。记录这个BUG主要是记录下汉字的编码方法。3.修复方法解码时对齐即可。4.unicode编......
  • java之多线程篇
    一、基本概念1.什么是线程?线程就是,操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。简单理解就是:应用软件中互相独立,可以同时运行的功能2.什么是多线程?有了多线程,我们就可以让程序同时做多件事情3.多线程的作用?提高效率4.线程的应用场......
  • 多线程执行函数(迭代器版本)
    #include<iostream>#include<numeric>#include<thread>#include<vector>template<typenameIterator,typenameT>structthreadBlock{voidoperator()(T(*func)(Iterator,Iterator,T),Iteratorfirst,Iteratorlast,T&am......
  • Android Irregular View
    AboutthisProjectAnandroidviewthatenableclipforegroundandbackgroundintoirregularshapeCoreAbilityforegrounddrawablebackgrounddrawableforegroundborderbackgroundborderclipdrawableintoanyshapeclipbypathorroundcornersStepsforI......
  • 前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化
    这一章主要分享一下使用Konva遇到的性能优化问题,并且介绍一下UI美化的思路。至少有2位小伙伴积极反馈,发现本示例有明显的性能问题,一是内存溢出问题,二是卡顿的问题,在这里感谢大家的提醒。请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~g......