一个简单的html网页/网站优化效果

一个简单的html网页,网站优化效果,java网站建设开源,有关学校网站建设策划书在【Android】app中阻塞的looper为什么可以响应touch事件_消息队列阻塞为什么还能响应点击事件-CSDN博客 里面,我们查看到input事件唤醒应用中的looper阻塞, 作为对比,我们再看看广播中的唤醒,我们知道,在注册的广播…

在【Android】app中阻塞的looper为什么可以响应touch事件_消息队列阻塞为什么还能响应点击事件-CSDN博客

里面,我们查看到input事件唤醒应用中的looper阻塞,

作为对比,我们再看看广播中的唤醒,我们知道,在注册的广播接收器收到消息时,即广播的receiver调用的时候,是执行在主线程的,这显然是handler调用唤起的,比如亮屏这样的系统广播,我们猜测是AMS通过广播的相关处理,通过唤醒应用中的binder线程,调用相关方法,里面再调用主线程关联的handler来唤醒主线程looper阻塞,

过程比较复杂,这里说说大概流程,AMS通过IApplicationThread这个app的代理对象来进行调用,执行到app进程中,(这个时候是在ApplicationThread这个binder线程里)

app.thread.scheduleRegisteredReceiver(receiver, intent, resultCode,
                            data, extras, ordered, sticky, sendingUser, app.repProcState);
最终调用到广播binder对象的

ReceiverDispatcher.performReceive方法里,里面post到主进程。

参考:Android 广播内部机制详解(三)_android broadcastqueue is skipped in restrictedpac-CSDN博客

4.3.4 ReceiverDispatcher.performReceive
文件:LoadedApk.java

        public void performReceive(Intent intent, int resultCode, String data,
                Bundle extras, boolean ordered, boolean sticky, int sendingUser) {
            // 见4.3.5
            final Args args = new Args(intent, resultCode, data, extras, ordered,
                    sticky, sendingUser);
            if (intent == null) {
                Log.wtf(TAG, "Null intent received");
            } else {
                if (ActivityThread.DEBUG_BROADCAST) {
                    int seq = intent.getIntExtra("seq", -1);
                    Slog.i(ActivityThread.TAG, "Enqueueing broadcast " + intent.getAction()
                            + " seq=" + seq + " to " + mReceiver);
                }
            }
            // 将广播信息放到args中,post到主线程中执行,见4.3.5
            if (intent == null || !mActivityThread.post(args)) {
                if (mRegistered && ordered) {
                    IActivityManager mgr = ActivityManagerNative.getDefault();
                    if (ActivityThread.DEBUG_BROADCAST) Slog.i(ActivityThread.TAG,
                            "Finishing sync broadcast to " + mReceiver);
                    // 告诉AMS,广播处理完毕,动态的有序广播会走这里见4.3.6
                    args.sendFinished(mgr);
                }
            }
        }

mActivityThread继承于handler类,

public final class ActivityThread extends ClientTransactionHandler

ActivityThread是app的主线程,

可以看出,looper的阻塞唤醒可以由其他线程的handler消息(本质还是消息队列里的某个fd)和监听的fd上有消息(如input)

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

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

相关文章

[大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作

​​​​​​Generation of Complex 3D Human Motion by Temporal and Spatial Composition of Diffusion Models L Mandelli, S Berretti - arXiv preprint arXiv:2409.11920, 2024 通过时间和空间组合扩散模型生成复杂的3D人物动作 摘要 本文提出了一种新的方法&#xff0…

青动CRM V3.2.1

全面解决企业销售团队的全流程客户服务难题旨在助力企业销售全流程精细化、数字化管理,全面解决企业销售团队的全流程客户服务难题,帮助企业有效盘活客户资源、量化销售行为,合理配置资源、建立科学销售体系,提升销售业绩。标准授…

k8s上安装prometheus

一、下载对应的kube-prometheus源码 github地址:https://github.com/prometheus-operator/kube-prometheus 根据自己的Kubernetes版本下载对应的Kube-prometheus源码。 kubectl version 我的kubernetes的版本为v1.30.3固下载master分支的源码 1)进入…

地区环境保护支出数据(2007-2023年)

政府环境保护支出是指ZF在环境保护方面投入的CZ资金,用于自然生态保护、污染防治、环境监测与监管等多个领域,旨在改善环境质量、防范环境风险以及促进可持续发展 一、数据介绍 数据名称:地区环境保护支出数据 数据范围:中国31…

【MATLAB代码】三维空间上的RSS(信号强度)定位,n个锚点自适应(锚点数>3即可)(源代码下载链接)

文章目录 代码概况源代码运行结果RSS定位原理讲解1.基本概念2.信号强度与距离关系3. 定位原理 其他情况 代码概况 基于MATLAB的定位程序,使用RSS(接收信号强度)来估计距离,再由距离计算位置,用于三维空间上的定位。调…

生活中重大决定,除了你自己,谁也帮不了你!

随着年龄增长,越来越发现:生活是非常现实,更现实的社会,自己除了自己,谁也帮不了你。 因此,一个人的生活是好是坏,往往取决于我们自己的努力程度,越努力才会越幸运。没有伞的孩子&am…

RSpec简析及应用案例

文章目录 RSpec简析RSpec 的特点如何开始使用 RSpec示例 应用案例控制器测试创建 PostsController 的测试 请求测试创建请求测试 集成测试创建集成测试 RSpec简析 RSpec 是一个流行的 Ruby 测试工具,它支持行为驱动开发(BDD)。RSpec 提供了一…

消息中间件 Kafka 快速入门与实战

1、概述 最近感觉上班实在是太无聊,打算给大家分享一下Kafka的使用,本篇文章首先给大家分享三种方式搭建Kafka环境,接着给大家介绍kafka核心的基础概念以及Java API的使用,最后分享一个SpringBoot的集成案例,希望对大…

Ubuntu的基本用法与指令(为后面学习ROS打基础)

目录 0.声明:此博客的部分内容来自B站up主 机器人工匠阿杰,欢迎大家前往up主视频区学习(本人正在跟随此up主的视频学习无人机的部分相关知识) 1.win空格(切换中英文) 2.终端指令 1.ls:显示主…

数据结构-3.4.队列的基本概念

一.队列的定义: 1.图解: 2.重要术语: 空队列:队列中不含任何元素。 二.队列的基本操作: 三.总结:

神经网络(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络:单层感知机1.3两层神经网络:多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…

NLP 文本分类任务核心梳理

解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据,核心解决方案: 自己构造训练样本 数据增强,如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…

LaTex符号不好记忆?

总结在Matlab中常用的LaTeX符号如下: 1. **希腊字母**: - \alpha 表示 α - \beta 表示 β - \gamma 表示 γ - \delta 表示 δ - \epsilon 表示 ε - \zeta 表示 ζ - \eta 表示 η - \theta 表示 θ - \iota 表示 ι -…

安全的价值:构建现代企业的基础

物理安全对于组织来说并不是事后才考虑的问题:它是关键的基础设施。零售商、医疗保健提供商、市政当局、学校和所有其他类型的组织都依赖安全系统来保障其人员和场所的安全。 随着安全技术能力的不断发展,许多组织正在以更广泛的视角看待他们的投资&am…

Codeforces Round 975 (Div. 2)

传送门:https://codeforces.com/contest/2019 B. All Pairs Segments 题意: 首先样例解释一下: 一共有:[1,2],[1,3],[1,5],[1,6],[1,7],[2,3],[2,5],[2,6],[2,7],[3,5],[3,6],[3,7],[5,6],[5,7],[6,7] 点 1,7 在5个…

Mac电脑上最简单安装Python的方式

背景 最近换了一台新的 MacBook Air 电脑,所有的开发软件都没有了,需要重新配环境,而我现在最常用的开发程序就是Python。这篇文章记录一下我新Mac电脑安装Python的全过程,也给大家一些思路上的提醒。 以下是我新电脑的配置&…

Django项目配置日志

需求 在Django项目中实现控制台输出到日志文件,并且设置固定的大小以及当超过指定大小后覆盖最早的信息。 系统日志 使用Django自带的配置,可以自动记录Django的系统日志。 可以使用logging模块来配置。下面是一个完整的示例代码,展示了如…

xxl-job 适配达梦数据库

前言 在数字化转型的浪潮中,任务调度成为了后端服务不可或缺的一部分。XXL-JOB 是一个轻量级、分布式的任务调度框架,广泛应用于各种业务场景。达梦数据库(DM),作为一款国内领先的数据库产品,已经被越来越…

Redis篇(应用案例 - 商户查询缓存)

目录 一、什么是缓存? 二、为什么要使用缓存 三、如何使用缓存 四、添加商户缓存 1. 缓存模型和思路 2. 代码如下 五、缓存更新策略 1. 内存淘汰 2. 超时剔除 3. 主动更新 六、数据库缓存不一致解决方案 1. 数据库缓存不一致解决方案 2. 数据库和缓存不一致采用什…

AMD ROCm™ 安装指南

AMD ROCm™ installation — ROCm Blogs 注意: 本文之前是 AMD 实验笔记博客系列的一部分。 AMD ROCm™ 是第一个面向 HPC/超大规模级 GPU 计算的开源软件开发平台。AMD ROCm™ 将 UNIX 的选择权、极简主义和模块化软件开发哲学引入 GPU 计算领域。有关更多信息,请参…