【Android面试八股文】为什么Android中要设计为只能在UI线程中去更新UI?Android中子线程真的不能更新UI吗?如何在子线程中更新UI?

文章目录

  • 一、Android为什么不能在子线程更新UI?
  • 二、为什么Android中要设计为只能在UI线程中去更新UI?
  • 三、如果不在UI线程中更新UI,可能会出现什么问题呢?
  • 四、ViewRootImp是在onActivityCreated方法后面创建的吗?
  • 五、为什么一开始在Activity的onCreate方法中创建一个子线程访问UI,程序还是正常能跑起来呢
      • 1. Activity 生命周期概述
      • 2. 视图层次结构的初始化
      • 3. 子线程访问 UI 的时机
      • 4. 潜在问题
      • 正确的做法
  • 六、Android中子线程真的不能更新UI吗?
    • 6.1 满足两个条件
    • 6.2 保证上述条件1成立不就可以避免checkThread时候抛出异常了吗?为什么还需要开启消息循坏?
      • 条件2如何保证UI正确更新和绘制
    • 6.3 示例代码
  • 七、在实际开发中,如何将子线程的任务结果传递到UI线程进行更新?
  • 七、使用子线程更新UI有实际应用场景吗
    • SurfaceView 刷新UI的机制
    • 使用子线程刷新UI的示例
    • 主要要点
  • 八、扩展阅读

一、Android为什么不能在子线程更新UI?

viewRootImpl对象是在Activity中的onResume方法执行完成之后,View变得可见时才创建的,之前的操作是没有进行线程检查的,所以没有报错。但是ViewRootImpl创建之后,由于进行了checkThread操作,所以就不能在子线程更改UI了。

当访问 UI 时,ViewRootImpl 会调用 checkThread方法去检查当前访问 UI 的线程是否为创建 UI 的那个线程,如果不是。则会抛出异常。

当然可以,从系统源码的角度来解释为什么 Android 中子线程不能直接更新 UI。

  1. ViewRootImpl 的创建

在 Android 应用的生命周期中,ViewRootImpl 对象是在 Activity 的视图变得可见时被创建的。ViewRootImpl 是负责管理视图层次结构、处理测量、布局和绘制的核心类。

ActivityThread.java 中的 handleResumeActivity 方法是一个关键点:

public void 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生命在于学习——Python人工智能原理(3.4)

三、深度学习 7、过拟合与欠拟合 过拟合和欠拟合是所有机器学习算法都要考虑的问题。 (1)基本定义 a、欠拟合 欠拟合是指机器学习模型无法完全捕获数据集中的复杂模式,导致模型在新数据上的表现不佳,这通常是由于模型过于简单…

C++进阶,一文带你彻底搞懂左右值引用以及移动语义和完美转发!

目录 一、左值引用1.左值2.左值引用3.左值引用的用途(1)修改实参(2)减少拷贝(3)使用左值引用可以在外部修改对象内的成员变量的值 二、右值引用1.右值(1)纯右值(2&#x…

一文解答 | 代码签名证书怎么选

在当代软件开发中,代码签名证书对于确保软件的完整性、安全性及其可信度至关重要。它通过数字签名验证代码的来源和未被篡改的状态,向最终用户确保软件的可靠性。选择合适的代码签名证书既有利于保护软件开发商的声誉,也有助于建立用户对软件…

虚拟化 之三 详解 jailhouse(ARM 平台)的构建过程、配置及使用

嵌入式平台下,由于资源的限制,通常不具备通用性的 Linux 发行版,各大主流厂商都会提供自己的 Linux 发行版。这个发行版通常是基于某个 Linux 发行版构建系统来构建的,而不是全部手动构建,目前主流的 Linux 发行版构建系统是 Linux 基金会开发的 Yocto 构建系统。 基本环…

ChatGPT:自然语言处理的新纪元与OpenAI的深度融合

随着人工智能技术的蓬勃发展,自然语言处理(NLP)领域取得了显著的进步。OpenAI作为这一领域的领军者,以其卓越的技术实力和创新能力,不断推动着NLP领域向前发展。其中ChatGPT作为OpenAI的重要成果更是在全球范围内引起了…

go interface

package mainimport "fmt"// 接口 interface func main() {c : Chinese{} //创建一个中国人实例u : American{} //创建一个美国人实例greet(c) //中国人打招呼greet(u) //美国人打招呼 }// 接收具备SayHello接口能力的变量 func greet(s SayHello) {…

Vertical Layout 、Horizontal Layout 实验窗体自适应布局

实验目的 学习实验使用布局实现如下自适应界面 窗体邮件,布局设置为垂直布局 用同样的方法,添加groupbox,并右键设置为水平布局 拖入一个Horizontal Layout,然后拖入button,拖入 Horizontal Spacer 遇到一个问题&#…

如何将ai集成到radsystems项目中,在项目中引入ai

AI可以自动化重复性和低价值的任务,例如数据输入、文档处理、信息检索等,让员工能够专注于更具战略性和创造性的工作。通过引入AI驱动的聊天机器人或虚拟助手,可以提供24/7的客户支持,快速响应用户的问题,提高客户满意…

卡塔尔.巴林:海外媒体投放-宣发.发稿效果显著提高

引言 卡塔尔和巴林两国积极采取措施,通过海外媒体投放和宣发,将本国的商业新闻和相关信息传达给更广泛的受众。在这一过程中,卡塔尔新闻网、巴林商业新闻和摩纳哥新闻网等媒体起到了关键作用。通过投放新闻稿,这些国际化的媒体平…

CBoard开源数据可视化工具

CBoard开源数据可视化工具 文章目录 CBoard开源数据可视化工具介绍资源列表基础环境一、安装JDK二、安装Maven2.1、安装Maven2.2、配置Maven 三、安装Tomcat8四、安装MySQL5版本4.1、安装相关依赖4.2、二进制安装4.3、设定配置文件4.4、配置systemcatl方式启动4.5、访问MySQL数…

详解 Spring Security:全面保护 Java 应用程序的安全框架

详解 Spring Security:全面保护 Java 应用程序的安全框架 Spring Security 是一个功能强大且高度可定制的框架,用于保护基于 Java 的应用程序。它为身份验证、授权、防止跨站点请求伪造 (CSRF) 等安全需求提供了解决方案。下面将更详细地介绍 Spring Se…

WEP前端:深入解析其含义、特性及在Web开发中的应用

WEP前端:深入解析其含义、特性及在Web开发中的应用 在快速发展的互联网时代,前端技术日新月异,各种新的概念和术语层出不穷。其中,WEP前端作为近年来备受关注的一个领域,引发了广泛的讨论和研究。那么,WEP…

VMware安装ubuntu22.4虚拟机超详细图文教程

一 、下载镜像 下载地址:Index of /ubuntu-releases/22.04.4/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 二、创建虚拟机 打开VMware点击左上角文件,创建新的虚拟机,打开后如下图: 下一步,镜像文件就是…

超市陈列艺术:不仅仅是货品摆放,更是营销策略的体现

品类管理在门店落地的最直观表现就是单品的空间陈列管理,通过陈列细节的差异体现出门店的商品定位与策略。此文分析入木三分,值得学习。 在商品陈列的空间管理领域,不仅要考虑整体的空间陈列,也要对每个商品的空间陈列位置&#…

做了2年前端,盘点前端技术栈!大佬轻喷~

前言 自己写了快两年前端,但是大致总结一下哈哈哈哈我觉得这个话题蛮有意思的,可以看看大家的技术广度,可以进行分享和学习以及讨论所以这里说一下我对我的前端技术,做一下盘点和总结因为我的开发年限有限,所以我觉得…

焦化行业排放平台简介

在当今社会,环保事业日益受到人们的关注。焦化行业作为重要的工业领域之一,其排放问题一直是环保工作的重点。为了有效控制焦化行业的排放,实施焦化行业排放平台成为了必不可少的措施。朗观视觉小编将详细探讨焦化行业排放平台的实施范围&…

Android11 后台启动Activity

在 Android 10 (API 29) 及更高版本(包括 Android 11),系统对后台启动 Activity 施加了严格的限制。默认情况下,应用程序在后台无法启动 Activity,以提高用户体验并减少不必要的干扰。以下为解决方法。 From 7d554af386150edec1cd68f6eaf700538af4e373 Mon Sep 17 00:00:0…

LeetCode 596, 13, 2

目录 596. 超过5名学生的课题目链接表要求知识点思路代码 13. 罗马数字转整数题目链接标签罗马数字与阿拉伯数字映射规则 思路代码 2. 两数相加题目链接标签思路代码使用被赋值为结果链表头部的指针哨兵节点指向结果链表头部 596. 超过5名学生的课 题目链接 596. 超过5名学生…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】线性分类模型损失函数对比

本节均以二分类问题为例进行展开&#xff0c;统一定义类别标签 y ∈ { 1 , − 1 } y\in\{1,-1\} y∈{1,−1}&#xff0c;则分类正确时 y f ( x ; w ) > 0 yf(x;w)>0 yf(x;w)>0&#xff0c;且值越大越正确&#xff1b;错误时 y f ( x ; w ) < 0 yf(x;w)<0 yf(x;…

ubtun虚拟机安装

选择镜像后启动 选择第一个回车 加载完成后 &#xff0c;进入Ubuntu安装界面&#xff0c;安装语言选择English&#xff0c;完成后按一下回车&#xff1a; 此时弹出安装器可更新提示&#xff0c;下方选项选择第二个Continue without updating&#xff08;不更新&#xff0c;继续…