深入Android架构(从线程到AIDL)_08 认识Android的主线程
目录
3、 认识Android的主线程(又称UI线程)
复习: 各进程(Process)里的主线程编辑
UI线程的责任: 迅速处理UI事件
举例
3、 认识Android的主线程(又称UI线程)
复习: 各进程(Process)里的主线程

UI线程的责任: 迅速处理UI事件
- 在Android里,关照UI画面的事件(Event)是UI线程的重要职责,而且是它的专属职责,其它子线程并不可以插手存取UI画面上的对象(如TextView)呢!
- 由于Android希望UI线程能够给予用户的要求做快速的反应。如果UI 线程花费太多时间做幕后的事情,而在UI事件发生之后,让用户等待超过5秒钟而未处理的话,Android就会向用户道歉。

// ac01.java
// ……..
public class ac01 extends Activity implements OnClickListener {public TextView tv;private Button btn, btn2, btn3;public void onCreate(Bundle icicle) {super.onCreate(icicle);LinearLayout layout = new LinearLayout(this);layout.setOrientation(LinearLayout.VERTICAL);btn = new Button(this); btn.setId(101);btn.setBackgroundResource(R.drawable.heart);btn.setText("Block UI thread"); btn.setOnClickListener(this);LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(150,50);param.topMargin = 10;layout.addView(btn, param);btn2 = new Button(this); btn2.setId(102);btn2.setBackgroundResource(R.drawable.heart);btn2.setText("Show"); btn2.setOnClickListener(this);layout.addView(btn2, param);btn3 = new Button(this); btn3.setId(103);btn3.setBackgroundResource(R.drawable.heart);btn3.setText("Exit"); btn3.setOnClickListener(this);layout.addView(btn3, param);tv = new TextView(this);tv.setTextColor(Color.WHITE); tv.setText("");LinearLayout.LayoutParams param2 =new LinearLayout.LayoutParams(150, 60);param2.topMargin = 10;layout.addView(tv, param2);setContentView(layout);//------------------------------setTitle("please press <Block...> & <Show> ");tv.setText("then wait for 5 min...");}public void onClick(View v) {switch(v.getId()){case 101:try { Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}break;case 102: break;case 103: finish(); break;}}
}
- 此程式執行時,畫面上先出現:

- 連續按下<Block UI thread>和<Show>按鈕,然後等待5秒鐘,就會出現剛才所說的道歉提示,如下圖:

举例
- 如果想要一边秀动画,一边播音乐时,使用单一线程来控制一边秀动画,一边播音乐,如下图所示;又会如何呢?

- 主线程可以诞生多个子线程来分担其工作,尤其是比较冗长费时的幕后服务工作,例如播放动画的背景音乐、或从网络下载影片等。于是,主线程就能专心于处理UI画面的事件了。
- 再如,当你开发一个游戏程序时,如果你希望游戏循环不受UI事件的干扰,或希望游戏循环(GameLoop)不要阻塞住UI线程的话,就不适合拿UI线程去跑游戏循环了。
相关文章:
深入Android架构(从线程到AIDL)_08 认识Android的主线程
目录 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程编辑 UI线程的责任: 迅速处理UI事件 举例 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程 UI线程的责任: 迅速处理UI事…...
集线器,交换机,路由器,mac地址和ip地址知识记录总结
一篇很不错的视频简介 基本功能 从使用方面来说,都是为了网络传输的标识,和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器,下面是区别: 集线器 集线器:一个简单的物理扩展接口数量的物理硬件。…...
【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程
create-vue 简介 GitHub:https://github.com/vuejs/create-vue 创建的选项有多个,具体的可以看下方截图,当创建完成的时候可以发现工程中是自带vite的。 下面对其中的各种内容进行简单的说明 JSX (可以选择,但是我感觉没什么必要) 全称:JavaScript XML 允许你在 Java…...
Jetpack Compose 学习笔记(一)—— 快速上手
本篇主要是对 Jetpack Compose 有一个宏观上的了解。 1、Jetpack Compose 是什么与优势 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。 Compose 的优势&am…...
Kafka3.x KRaft 模式 (没有zookeeper) 常用命令
版本号:kafka_2.12-3.7.0 说明:如有多个地址,用逗号分隔 创建主题 bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic demo --partitions 1 --replication-factor 1删除主题 bin/kafka-topics.sh --delete --boots…...
Leetcode 最大正方形
java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...
ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题
参考https://cloud.tencent.com/developer/ask/sof/116470494 电脑是联想x1笔记本,显卡是intel的,nvidia显卡好像没看见这种问题。 sudo apt update sudo apt install xserver-xorg打开custom.conf, sudo gedit /etc/gdm3/custom.conf 解…...
沙箱模拟支付宝支付3--支付的实现
1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…...
Golang的代码质量分析工具
Golang的代码质量分析工具 一、介绍 作为一种高效、简洁、可靠的编程语言,被越来越多的开发者所喜爱和采用。而随着项目规模的增长和团队人员的扩大,代码质量的管理变得尤为重要。为了保障代码的可维护性、健壮性和可扩展性,我们需要借助代码…...
【Linux】:多线程(读写锁 自旋锁)
✨ 倘若南方知我意,莫将晚霞落黄昏 🌏 📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 &#…...
Java开发 PDF文件生成方案
业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…...
数学期望和方差
数学期望(Mathematical Expectation)和方差(Variance)是概率论和统计学中两个非常重要的概念。下面将分别对这两个概念进行解释。 数学期望 数学期望是随机变量的平均值,它描述了随机变量的中心位置。对于离散随机变…...
【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍Tensor RT 的优化流程。
【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍Tensor RT 的优化流程。 【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍Tensor RT 的优化流程。 文章目录 【面试AI算法题中的知识点】方向涉及:ML/D…...
BLDC无感控制的驱动逻辑
如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于…...
BP神经网络的反向传播算法
BP神经网络(Backpropagation Neural Network)是一种常用的多层前馈神经网络,通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数,从而调整权重,使得网络的预测输出与真实输出之间…...
[实用指南]如何将视频从iPhone传输到iPad
概括 将视频从 iPhone 传输到 iPad 时遇到问题?您可能知道一种方法,但不知道如何操作。此外,您要传输的视频越大,完成任务就越困难。那么如何将视频从 iPhone 传输到 iPad,特别是当您需要发送大视频文件时?…...
Linux Snipaste 截图闪屏/闪烁
防 csdn 不能看,Go to juejin Linux Snipaste 截图时窗口元素一闪一闪的无法正常使用。 解决此问题时系统环境为 Manjaro KDE6,不过我在其他发行版与 gnome 上也碰到了。 先放解决办法: # 启动 Snipaste 时去掉缩放参数 env -u QT_SCREEN_…...
【YOLOv5】源码(common.py)
该文件位于/models/common.py,提供了构建YOLOv5模型的各种基础模块,其中包含了常用的功能模块,如自动填充autopad函数、标准卷积层Conv、瓶颈层Bottleneck、C3、SPPF、Concat层等 参考笔记:【YOLOv3】 源码(common.py…...
Node 如何生成 RSA 公钥私钥对
一、引入crypto模块 crypto 为node 自带模块,无需安装 const crypto require(crypto);二、封装生成方法 async function generateRSAKeyPair() {return new Promise((resolve, reject) > {crypto.generateKeyPair(rsa, {modulusLength: 2048, // 密钥长度为 …...
瑞_Linux中部署配置Java服务并设置开机自启动
文章目录 背景Linux服务配置步骤并设置开机自启动附-Linux服务常用指令 🙊 前言:由于博主在工作时,需要将服务部署到 Linux 服务器上运行,每次通过指令启动服务非常麻烦,所以将 jar 包部署的服务设置开机自启动&#x…...
高效数据采集解决方案:快手内容获取工具的技术实现与应用指南
高效数据采集解决方案:快手内容获取工具的技术实现与应用指南 【免费下载链接】kuaishou-crawler As you can see, a kuaishou crawler 项目地址: https://gitcode.com/gh_mirrors/ku/kuaishou-crawler 在信息爆炸的时代,如何高效、合规地获取网络…...
AI驱动3D骨骼绑定:从3天到3分钟的自动化革命
AI驱动3D骨骼绑定:从3天到3分钟的自动化革命 【免费下载链接】UniRig One Model to Rig Them All: Diverse Skeleton Rigging with UniRig 项目地址: https://gitcode.com/gh_mirrors/un/UniRig 3D骨骼绑定是动画制作流程中的关键环节,传统手工绑…...
springboot+vue基于web的网上考试系统的设计系统
目录同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分题库管理模块在线考试模块自动阅卷模块技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 系统功能模…...
为什么选择ODB++格式?Cadence与HyperLynx数据交换的最佳实践
为什么选择ODB格式?Cadence与HyperLynx数据交换的最佳实践 在高速PCB设计领域,数据格式的选择直接影响着设计到制造的整个流程效率。当工程师需要在Cadence Allegro和HyperLynx之间传递设计数据时,ODB正逐渐成为行业首选。这种智能数据格式不…...
从拒稿到录用:我的TOMM投稿实战复盘与经验分享
1. 从TMM拒稿到TOMM录用的心路历程 第一次收到TMM的拒稿邮件时,我正在实验室熬夜改代码。邮件弹出来的那一刻,整个人就像被泼了一盆冷水。那篇论文已经经历了三轮大修,每次都是几十条审稿意见,我们团队前前后后修改了上百个细节。…...
别再傻等DockerHub了!手把手教你配置阿里云镜像加速,5分钟搞定MySQL 8.0拉取
国内开发者必备:5分钟配置Docker镜像加速全攻略 每次在终端输入docker pull后,看着进度条像蜗牛一样缓慢移动,或者干脆直接报错Error response from daemon,这种体验对国内开发者来说再熟悉不过了。DockerHub的服务器远在海外&am…...
EmbeddingGemma-300m效果展示:多语言文本相似度计算实战
EmbeddingGemma-300m效果展示:多语言文本相似度计算实战 1. 引言 文本嵌入模型正在改变我们处理多语言内容的方式。想象一下,你有一个包含中文、英文、法文等多种语言的文档库,如何快速找到语义相似的内容?传统的关键词匹配方法…...
如何突破设备限制?打造你的全场景跨平台开发中枢
如何突破设备限制?打造你的全场景跨平台开发中枢 【免费下载链接】code-server VS Code in the browser 项目地址: https://gitcode.com/GitHub_Trending/co/code-server 在多设备开发的时代,远程开发环境已成为连接不同终端的核心枢纽࿰…...
Mermaid Live Editor:代码驱动图表设计的终极解决方案
Mermaid Live Editor:代码驱动图表设计的终极解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor…...
HarmonyOS6 半年磨一剑 - RcCheckboxGroup 组件与全选不确定态机制深度解析
文章目录前言一、RcCheckboxGroup 内部状态同步1.1 双层状态管理1.2 选中状态判断二、布局渲染架构2.1 横向与纵向的渲染分支2.2 itemGap 的类型安全处理2.3 属性透传机制三、全选与不确定态(indeterminate)3.1 三态状态机3.2 全选逻辑实现3.3 indetermi…...
