Android 基础类(01)- Thread类 - readyToRun和threadLoop
一、前言:
在阅读AOSP代码过程中,我们经常会看到Thread
子类重写两个方法:readyToRun
和threadLoop
,不清楚的同学,可能在这儿连调用逻辑都搞不清楚了,因为找不到谁调用了它。我这儿先不去深究Thread内部逻辑,只阐述调用时机。
二、调用时机:
当一个类继承了Thread类后,threadLoop方法和readyToRun方法的执行时机如下:
readyToRun方法:
readyToRun方法通常在Thread对象被启动之后,但在threadLoop方法开始执行之前被调用。
readyToRun方法用于执行一些初始化操作,准备线程执行所需的资源或环境。这个方法在子类中被重写,以便在线程开始执行之前进行必要的初始化工作。
通常,readyToRun方法会在Thread对象的run方法中被调用,在run方法中会先调用readyToRun,然后再调用threadLoop方法开始线程的主要逻辑。
threadLoop方法:
threadLoop方法是Thread类中的一个虚函数,用于定义线程的主要逻辑。子类需要继承Thread类并重写threadLoop方法,以实现线程的具体行为。
threadLoop方法定义了线程的主要执行逻辑,包括线程的循环操作,处理消息或事件等。
在Thread对象启动后,线程会执行threadLoop方法中定义的逻辑,直到线程被停止或销毁。
小结:
总的来说,readyToRun方法用于线程启动前的初始化工作,而threadLoop方法则定义了线程的主要执行逻辑。readyToRun方法在线程启动时执行,而threadLoop方法则在readyToRun方法执行完毕后开始运行,成为线程的主要执行体。
三、应用实例:
class TimeCheckThread : public Thread {public:explicit TimeCheckThread(BootAnimation* bootAnimation);virtual ~TimeCheckThread();private:virtual status_t readyToRun();virtual bool threadLoop();bool doThreadLoop();void addTimeDirWatch();int mInotifyFd;int mSystemWd;int mTimeWd;BootAnimation* mBootAnimation;};
看到上面AOSP的一段代码,TimeCheckThread
类就继承自Thread
,那么就将自己的初始化代码放到
readyToRun
,然后将线程主逻辑放到threadLoop
。如下:
status_t BootAnimation::TimeCheckThread::readyToRun() {mInotifyFd = inotify_init();if (mInotifyFd < 0) {SLOGE("Could not initialize inotify fd");return NO_INIT;}mSystemWd = inotify_add_watch(mInotifyFd, SYSTEM_DATA_DIR_PATH, IN_CREATE | IN_ATTRIB);if (mSystemWd < 0) {close(mInotifyFd);mInotifyFd = -1;SLOGE("Could not add watch for %s", SYSTEM_DATA_DIR_PATH);return NO_INIT;}addTimeDirWatch();if (mBootAnimation->updateIsTimeAccurate()) {close(mInotifyFd);mInotifyFd = -1;return ALREADY_EXISTS;}return NO_ERROR;
}
还有:
bool BootAnimation::TimeCheckThread::threadLoop() {bool shouldLoop = doThreadLoop() && !mBootAnimation->mTimeIsAccurate&& mBootAnimation->mClockEnabled;if (!shouldLoop) {close(mInotifyFd);mInotifyFd = -1;}return shouldLoop;
}
相关文章:
Android 基础类(01)- Thread类 - readyToRun和threadLoop
一、前言: 在阅读AOSP代码过程中,我们经常会看到Thread子类重写两个方法:readyToRun和threadLoop,不清楚的同学,可能在这儿连调用逻辑都搞不清楚了,因为找不到谁调用了它。我这儿先不去深究Thread内部逻辑…...
C++设计模式之构造器
动机 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 如何…...
红日靶场-5
环境搭建 这个靶场相对于前几个靶场来说较为简单,只有两台靶机,其中一台主机是win7,作为我们的DMZ区域的入口机,另外一台是windows2008,作为我们的域控主机,所以我们只需要给我们的win7配置两张网卡&#…...
做异端中的异端 -- Emacs裸奔之路3: 上古神键Hyper
谈一下快捷捷冲突的问题。 Emacs几乎穷尽所有组合键 我用下面命令,在Fundamental模式下,枚举所有绑定。 (defun keymap-lookup-test-fn(); printable keys(setq printable-chars (number-sequence 33 126))(setq i 0)(while (< i (length printable…...
Java多线程介绍及使用指南
“多线程”:并发 要介绍线程,首先要区分开程序、进程和线程这三者的区别。 程序:具有一定功能的代码的集合,但是是静态的,没有启动运行 进程:启动运行的程序【资源的分配单位】 线程:进程中的…...
HarmonyOS 5.0应用开发——列表(List)
【高心星出品】 文章目录 列表(List)列表介绍列表布局设置主轴方向设置交叉轴方向 列表填充分组列表填充 滚动条位置设置滚动位置滚到监听 列表项侧滑 列表(List) 列表介绍 列表作为一种容器,会自动按其滚动方向排列…...
自动化电气行业的优势和劣势是什么
优势 市场需求广泛: 自动化电气技术广泛应用于电力系统、制造业、交通、农业等多个领域,随着智能化、数字化趋势的加强,其市场需求持续增长。在智能制造、智能电网等领域,自动化电气技术更是发挥着关键作用,推动了行业…...
第 42 章 - Go语言 设计模式
在Go语言中,设计模式是一种被广泛接受的解决常见问题的最佳实践。这些模式可以分为三类:创建型模式、结构型模式和行为型模式。下面我将结合案例以及源代码对这三种类型的设计模式进行详细讲解。 创建型模式 创建型模式主要关注对象的创建过程…...
【机器学习】---大语言模型
引言:开启大语言模型的奇幻旅程 近年来,人工智能(AI)领域正在经历一场前所未有的技术革命,而其中最耀眼的明星莫过于大语言模型(Large Language Models, LLMs)。这些模型,犹如现代科…...
挑战用React封装100个组件【002】
项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于需要展示图文信息的场景,比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示 样式展示 代码展示 InfoCard.tsx import ./InfoCard.cssinterface InfoCardProps {t…...
MarkDown-插入图片-图片url地址的生成获取方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、url地址是什么二、如何获取图片的url地址1.了解图床2.使用图床获取图片URL地址2.1进入网站后,点击右下角“Select Image.”按钮,即可…...
插值、拟合和回归分析的相关知识
目录 0 序言 1 分段线性插值 2 多项式插值 3 样条插值 4 最小二乘拟合 5 多元线性回归 0 序言 在生产实践和科学研究中,常常有这些问题: 插值问题:由实验或测量得到变量间的一批离散样点,要求得到变量之间的函数关系或得到样点之外的…...
【小白学机器学习42】进行多次抽样,样本的分布参数和总体的分布参数的关系
目录 1 进行多次抽样,样本的分布参数和总体的分布参数的关系 2 样本容量越大,多次抽样的样本的分布参数和总体的分布参数的关系 3 随着样本容量增大,多次抽样均值的 平均值,方差的变化 4 随着样本容量增大,多次抽…...
链动星海 质引未来|中信银行加码科技金融 “接力式”服务助力“新质生产力”释放
11月26日,第二届中国国际供应链促进博览会(以下简称链博会)在北京中国国际展览中心开幕。中信集团以“链动星海 质引未来”为主题,亮相先进制造链展区。此次布展由中信金控主办、中信银行承办,携手中信证券、中信建投证…...
黑马2024AI+JavaWeb开发入门Day02-JS-VUE飞书作业
视频地址:哔哩哔哩 讲义作业飞书地址:飞书 一、作业1 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…...
云计算基础-期末复习
第一章:云计算概论 一、云计算的定义与特征 1. 定义: 云计算是一种通过网络以按需、可扩展的方式获取计算资源和服务的模式。它将计算资源视为一种公用事业,用户可以根据需求动态获取和释放资源,而无需了解底层基础设施的细节。…...
Java GET请求 请求参数在Body中使用Json格式传参
业务需要调个三方接口 使用GET请求方式 但是!请求参数不在Query中,竟然在Body中,使用Json格式传参 在API调试工具里面可以调通 在java代码里,死活调不通 网上搜了搜,找到一个靠谱的,记录一下 import o…...
AI数据分析工具(一)
Looker Studio(谷歌)-免费 优点 免费使用:对于中小型企业和个人用户来说,没有任何费用压力,可以免费享受到数据可视化和报表创建的功能。与Google服务集成:特别适合使用Google产品生态的企业,…...
go结构体匿名“继承“方法冲突时继承优先顺序
在 Go 语言中,匿名字段(也称为嵌入字段)可以用来实现继承的效果。当你在一个结构体中匿名嵌入另一个结构体时,嵌入结构体的方法会被提升到外部结构体中。这意味着你可以直接通过外部结构体调用嵌入结构体的方法。 如果多个嵌入结…...
【049】基于51单片机语音录放【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统ISD4004语音芯片LM386音频放大器喇叭LCD1602液晶显示按键控制LED灯。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片,LCD1602液晶显示屏实时显示; 2、系统具有两种模式:录音…...
《软件项目管理》期末-复习题及参考答案
(1)赶工一个任务时,你应该关注( C ) A. 尽可能多的任务 B. 非关键任务 C. 加速执行关键路径上的任务 D. 通过成本最低化加速执行任务 (2)下列哪个不是项目管理计划的一部分?&#x…...
milvus 通俗易懂原理
向量值如何生成的 Milvus 是一个开源的向量数据库,专门用于处理高维向量的存储、搜索和分析。向量值本身通常来自于某些机器学习或深度学习模型的输出,尤其是在自然语言处理(NLP)、计算机视觉(CV)、推荐系…...
什么是撞库、拖库和洗库?
“撞库”是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。 很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网…...
安卓-碎片的使用入门
1.碎片(Fragment)是什么 Fragment是依赖于Activity的,不能独立存在的,是Activity界面中的一部分,可理解为模块化的Activity,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛. Fragment不能独立存在,必须…...
华为IPD流程学习之——深入解读123页华为IPD流程体系设计方法论PPT
该方案全面介绍了华为IPD流程体系设计方法论,包括流程体系建设的背景、理念、架构、核心特征、构建模型、与组织和战略的关系、运营机制、数字化转型以及流程管理组织等内容,旨在为企业提供一套系统的流程体系建设指导,以提升运营效率、质量和…...
DriveMLLM:一个专为自动驾驶空间理解任务设计的大规模基准数据集
2024-11-20, 由武汉大学、中国科学院自动化研究所、悉尼科技大学、牛津大学等合创建了DriveMLLM数据集,该数据集是自动驾驶领域首个专为评估多模态大型语言模型(MLLMs)空间理解能力而设计的基准,对于推动自动驾驶技术的…...
高效处理 iOS 应用中的大规模礼物数据:以直播项目为例(1-礼物池)
引言 在现代iOS应用开发中,处理大规模数据是一个常见的挑战。尤其实在直播项目中,礼物面板作为展示用户互动的重要部分,通常需要实时显示海量的礼物数据。这些数据不仅涉及到不同的区域、主播的动态差异,还需要保证高效的加载与渲…...
python的函数与递归
需求: 编写一个函数,计算斐波那契数列的第 N 项,并使用递归实现。 为了计算斐波那契数列的第 N 项,可以使用递归方法。斐波那契数列的定义是: F(0) 0 F(1) 1 对于 n > 2,F(n) F(n-1) F(n-2)…...
RabbitMQ学习-Seven
再SpringBoot中使用MQ 1.创建SpringBoot项目 除了我们平常使用的一些工具依赖,还需要选择这个Spring for RabbitMQ依赖 2.需要在application.yml文件中进行配置 server:port :9090 spring:application:name:producerrabbitmq:host: 你的主机名port: 5672virtual-…...
中科亿海微SoM模组——波控处理软硬一体解决方案
本文介绍的波控处理软硬一体解决方案主要是面向相控阵天线控制领域,波控处理通过控制不同天线组件的幅相来调整天线波束的方向和增益,实现高精度角度控制和高增益。本方案由波控处理板、波控处理控制软件算法和上位机软件共同构成。波控处理SoM模组原型样…...
网站建设滨江/我要下载百度
方法就是: 1,写成静态成员函数 2,参数为 (void* __this)用来传入类 对象指针(this) 3,进入函数首先 C类名 *_this (C类名*)__this; 转化为对象指针 4,之后用_this调用类成员变量和方法就行…...
网站怎么才能吸引人/百度一下电脑版首页
趁着5.1节放假,把自己的老DELL6400笔记本系统更新成了ubuntu12.04。虽然新的桌面系统变革挺大,但好在熟悉熟悉也就适应了。可惜好景不长,正听着MP3呢,突然笔记本内置音箱没有声音了。开始以为是自己设置造成的,调来调去…...
营销型网站模板展示/百度公司简介介绍
php读取文件内容的三种可行方法示例介绍发布于 2015-01-09 09:57:52 | 121 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特…...
网络调查问卷怎么制作/东莞seo网站推广建设
拉取mysql镜像后,新建并启动mysql容器[rootlocalhost ~]# docker run -d --name mysql1 -p 3306:3306 mysql使用docker ps没有查到,使用docker ps -a查到结果为退出查看docker日志错误日志显示需要一个mysql密码,这个三个参数必须指定一个doc…...
Java做网站的基本框架/代写1000字多少钱
序号带小括号的为非必须步骤,但一般建议执行。方法一(转自bilibili)资源:蓝奏云密码:4br71. 配置termux自行百度(若此步骤未执行termux-setup-storage命令请执行一次)(2). 换源(百度:termux换源),执行:pkg …...
网络技术人员/seo类目链接优化
不重启 Emacs 让新修改的配置内容生效,有四个函数可以做到: M-x eval-last-sexp 使当前 elisp 配置中光标前的那一条语句立刻生效;M-x eval-region 使当前 elisp 配置中选中的 region 中的语句立刻生效;M-x eval-buffer 使当前的 …...