Activity与AMS跨进程通讯方式更新部分

跨进程通讯Binder的onTransact方法一定在binder线程池的binder线程中执行吗? 外链图片转存中…(img-JcK7qfDl-1712070246642)] 阅读详情

首先可以看看onResume的调用栈是哪里调用过来的
更多内容qqun:422901085 https://ke.qq.com/course/5992266#term_id=106217431

onResume:139, BaseQuickstepLauncher (com.android.launcher3)
callActivityOnResume:1531, Instrumentation (android.app)
performResume:8422, Activity (android.app)
performResumeActivity:4793, ActivityThread (android.app)
handleResumeActivity:4836, ActivityThread (android.app)
execute:54, ResumeActivityItem (android.app.servertransaction)
execute:45, ActivityTransactionItem (android.app.servertransaction)
executeLifecycleState:176, TransactionExecutor (android.app.servertransaction)
execute:97, TransactionExecutor (android.app.servertransaction)
handleMessage:2308, ActivityThread$H (android.app)
dispatchMessage:106, Handler (android.os)
loopOnce:201, Looper (android.os)
loop:288, Looper (android.os)
main:7898, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:548, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:936, ZygoteInit (com.android.internal.os)

明显可以看出是靠handler中对EXECUTE_TRANSACTION的消息进行处理execute会最后执行到Activity的onResume

  case EXECUTE_TRANSACTION:
                    final ClientTransaction transaction = (ClientTransaction) msg.obj;
                    
                    mTransactionExecutor.execute(transaction);

那么EXECUTE_TRANSACTION消息谁发送的?

其实是如下ClientTransactionHandler代码发送的:

public abstract class ClientTransactionHandler {

    // Schedule phase related logic and handlers.

    /** Prepare and schedule transaction for execution. */
    void scheduleTransaction(ClientTransaction transaction) {
        transaction.preExecute(this);
        sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
    }

再看看ActivityThread的结构:

public final class ActivityThread extends ClientTransactionHandler
        implements ActivityThreadInternal {

那么又是谁调用过来的?那肯定是systemserver的跨进程调用的

scheduleTransaction:51, ClientTransactionHandler (android.app)
scheduleTransaction:1848, ActivityThread$ApplicationThread (android.app)
onTransact:1078, IApplicationThread$Stub (android.app)
execTransactInternal:1285, Binder (android.os)
execTransact:1244, Binder (android.os)

其中void scheduleTransaction(ClientTransaction transaction)参数ClientTransaction就是systemserver传递的对象,该对象的成员主要又2个:

 /** A list of individual callbacks to a client. */
    @UnsupportedAppUsage
    private List<ClientTransactionItem> mActivityCallbacks;

    /**
     * Final lifecycle state in which the client activity should be after the transaction is
     * executed.
     */
    private ActivityLifecycleItem mLifecycleStateRequest;

mActivityCallbacks这里代表是一类独立的callback Item比如:
LaunchActivityItem它就包含要执行任务较多

mLifecycleStateRequest这里就是单独一个生命周期
如:ResumeActivityItem
它一个transation 执行在mActivityCallbacks后

amis-summary:Amis几种使用总结 amis--使用总结 总结了Amis一些使用技巧,帮助初学者入门 当前版本Amis 1.1.0 演示预览: 支持了snowpack,可10秒内启动 SnowPack启动: yarn && yarn snowpack WebPack启动,请耐心等待... react-app-rewired更改为webpack-dev-server,方便扩展 yarn && yarn server 整理的内容包括: 1. HelloWorld(基于Create React App) 文件路径: 2. Amis基本使用 提供AmisRender用来所有页面进行注册使用。 3. Amis组件通信 3.1 target-Name方式 3.2开拓方式(非官方方式) JSSDK使用方式会返回scope,并且可以scope.getComponentByName(“ form1”)方式获取组件实例, l 立即下载

相关推荐

手把手教你用Kali Linux搭建vulntarget-a靶场环境(附详细配置步骤)

本文详细介绍了如何在Kali Linux环境下搭建vulntarget漏洞靶场,包括环境规划、虚拟化平台配置、靶机系统部署及安全工具链配置等关键步骤。通过实战演练,帮助网络安全从业者和初学者掌握专业级漏洞实验平台的搭建与管理技巧,提升安全测试能力。

weixin_29279101的博客 107

大厂底层必修:“应用程序与 AMS 的通讯实现”

以上就是应用程序进程和管理者进程之间的通讯方式,究其根本,都是经过获取对方进程的代理对象的方法发送消息,而对方进程则在方法中进行消息的处理,从而实现了进程之间的通讯有需要学习更多Android进阶技术的同学;我自荐一套《完整的Android的资料,以及一些视频课讲解》现在私信发送“进阶”或“笔记”即可免费获取最后我想说对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们httpshttps。...

m0_62167422的博客 520

Unity游戏开发:从零开始适配Nintendo Switch的完整指南

本文详细介绍了如何使用Unity进行Nintendo Switch游戏开发的完整流程,包括开发环境搭建、Unity工程适配、手柄与硬件特性开发、存储与性能优化等关键步骤。特别强调了Switch SDK的配置、输入系统改造和内存优化技巧,帮助开发者高效完成跨平台适配。

vodka的博客 1069

组件传值的八种方式

父传子 首先在使用子组件的标签上 通过自定义属性传递变量 在子组件中 通过 props 接受 在接收的时候有两种接收方式 数组形式 和 对象形式 对象形式可以规定传来的变量的数据类型(type)默认值(default)以及是否必填(required) 子传父 首先在使用子组件的标签上定义一个自定义事件 在子组件里通过 this.emit 去调用这个自定义事件 emit 方法的第一个参数是自定义事件的名字 第二个参数是就是子组件要传递给父组件的变量 最后在父组件接收使用就可以了 ..

jianren0410的博客 718

不只是驱动:拆解AIC8800 WiFi模组在RK Android系统的完整启动链(从DTS到HAL)

本文深入解析了AIC8800 WiFi模组在RK Android系统中的完整启动链,从设备树(DTS)配置到HAL层适配,涵盖驱动移植、固件加载及用户空间服务协同等关键环节。通过详细的技术分析和调试技巧,帮助开发者解决RK平台与AIC8800模组的兼容性问题,优化WiFi子系统性能。

weixin_30439067的博客 492

oracle19c 无备份情况下重建ocr 和 votedisk

无备份情况下重建ocr 和 votedisk – 19c 备注:测试环境基本上都有ocr自动备份文件,建议参考有备份情况下恢复ocr和votedisk Deconfigure and reconfigure entire cluster will rebuild OCR and Voting Disk, user resources (database, instance, service, ...

fangang001的专栏 4179

四大组件与AMS交互初步理解

目录     四大组件与AMS交互初步理解 一、Activity 二、Service 三、BroadcastReceiver 四、ContentProvider   四大组件与AMS交互初步理解 一、Activity ActivityThread是应用的主进程,Activty想要与ams通信(如运行startActivity()),都是通过Binder机制,ActivityM...

u010375903的博客 828

YOLO系列专栏(五):YOLO26 模型部署实战 | 从训练完成到落地应用(CPU/GPU/移动端)

训练好的YOLO26模型,本质上是一个权重文件(.pt格式),无法直接在实际场景中使用——不同应用场景需要不同格式的模型(如ONNX、TensorRT、TFLite),不同设备(CPU/GPU/移动端)的部署方式也截然不同。在保证模型精度基本不变的前提下,最大化提升推理速度,适配不同硬件设备。如果部署不当,会出现以下问题:❌ 推理速度慢:CPU部署单帧推理耗时超过100ms,无法满足实时检测需求(如监控、自动驾驶);❌ 模型格式不兼容:直接使用.pt权重文件,无法在移动端、嵌入式设备上运行;

qq_36130719的博客 632

Amis 组件再分析

提示显示位置,可用’top-right’、‘top-center’、‘top-left’、‘bottom-center’、‘bottom-left’、‘bottom-right’、‘center’。踩坑记:axios改用umi的request之后,相同的mock给出的响应,用axios没问题,用request之后后显示Response is empty错误,跟踪数据后发现axios的响应会比umi多一个data,把mock的返回数据加上一层data包裹,就好了。data, // 请求数据。

Jimmy的专栏 1625

【Com通信】Com模块的事件帧发送及周期报文的快慢发送机制

Com模块的事件帧发送及周期报文的快慢发送机制

qq_36056498的博客 2335

SAP Fiori Launchpad 概述

SAP Fiori launchpad 是托管 SAP Fiori 应用程序的 shell,并为应用程序提供导航、个性化、嵌入式支持和应用程序配置等服务。SAP Fiori Launchpad 是移动和桌面设备上 SAP Fiori 应用程序的入口点。启动板显示带有图块的主页,其中可以显示实时状态指示器,例如打开的任务数量。每个图块代表用户可以启动的业务应用程序。这包括 SAP Business Suite 事务应用程序和 SAP Smart Business 分析应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 932

activity启动流程

今天要分析下fwk中activity的启动流程,之前看别人画的流程图,总是很快就忘记了,而且总是摸不着重点,遇到具体问题时还是不知道从何入手,又得从头看起。后来我想通了一件事,我们在分析这种源码时不应该过渡纠结于流程图与某个具体函数,而应该从宏观角度想想:要实现这个功能,他应该要包含哪些步骤? 学习activity启动流程时,请带着这样几个问题去阅读源码: 新的activity是何时被创建的?...

风和先行的专栏 888

基于YOLOv8改进的目标检测算法研究及毕设实现全流程指南

在PyTorch中定义改进后的YOLOv8模型。首先,导入相关的库和模块,然后定义骨干网络、颈部和头部的结构。# 这里定义骨干网络的结构,例如使用改进的CSP结构# 卷积层、批归一化层、激活函数等# 更多的卷积层、批归一化层、激活函数等# 其他层...# 其他层的输出...然后,定义颈部和头部的结构,类似地,将注意力机制和特征增强方法集成到模型中。本毕设以YOLOv8为基础,通过集成注意力机制、应用特征增强技术等方法,改进了目标检测算法。

m0_64661770的博客 323

Android-Framework学习笔记(七)AMS全家桶,2024年最新面试的教程

ActivityManager是一个和AMS相关联的类,它主要是对运行中的Activity进行管理,这些管理工作并不是由ActivityManager自己来处理,而是交由AMS来处理,ActivityManager中的方法会通过ActivityManagerNative(以后简称AMN)的getDefault方法来得到ActivityManagerProxy(以后简称AMP),通过AMP就可以和AMN进行通信,而AMN是一个抽象类,它会将功能交由它的子类AMS来处理,因此,AMP就是AMS的代理类。

2401_84023262的博客 905

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ActivityManagerService

极力推荐Android 开发大总结文章:欢迎收藏 程序员Android 力荐 ,Android 开发者需要的必备技能 本篇文章主要介绍 Android 开发中的 AMS部分知识点,通过阅读本篇文章,您将收获以下内容: AMS简单关系 AMS 构造函数 AMS 父类 AMS 常用 AMS部分方法实现 1. AMS简单关系 AMS 继承实现关系图 AMS代码路径 \frame...

anpaikan3027的博客 195

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

进程启动后到加载Activity的流程源码解析(基于安卓版本28)

zygote进程fork之后,系统会 启动ActivityThread的入口函数main()。ActivityThread准备一个ApplicationThread类,用于和AMS进行通讯。Activity与AMS通讯时通过binder机制进行的。

陈德山 1533

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android进阶——Android四大组件启动机制之Activity启动过程

前言 Activity启动过程涉及到的比较多的知识点有Binder的跨进程通讯,建议先看完Binder的跨进程通讯再来阅读本篇文章,在文章阅读开始,我们先要理解Activity启动模型,再者去理解有关Activity启动的基本概念,梳理Activity启动流程,这样在看源码的时候可以根据这...

chuanao8829的博客 820

Android Frameworks系统层禁止指定应用启动【disable startActivity】实例

Frameworks系统层禁止指定应用启动【disable startActivity】 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdo

麦小洛 3890

Android Context 深度解析:从抽象基类到源码实现(YCBlogs 基础组件系列)

> 本篇以 YCBlogs 仓库 [android/01.基础组件/14.Context基础介绍.md](https://link.gitcode.com/i/6ca72228b64cc767d33c05bf6684cf83) 为核心骨架,结合仓库内《App启动流程梳理》《ActivityThread分析》《Service启动流程》等源码级笔记,系统讲解 Android Context 的本质、类

gitblog_00672的博客 294

启动应用进程

Activity 生命周期图: 启动应用进程 点击桌面启动应用过程 Activity 生命周期图: Activity的生命周期中只有在以下3种状态之一,才能较长时间内保持状态不变。 Resumed(运行状态):Activity处于前台,且用户可以与其交互。 Paused(暂停状态): Activity被在前台中处于半透明状态或者未覆盖全屏的其他Activity部分遮挡。 暂停的Activity不会接收用户输入,也无法执行任何代码。 Stopped(停止状态):Activ..

lei7143的专栏 1816

Android插件化之DroidPlugin原理解析

DroidPlugin原理解析 从系统设计的角度,组件和窗口的逻辑实体都存在于系统服务,比如Activity创建后,其逻辑控制主体在AMS,对于窗口,其实逻辑控制主体在WMS android将逻辑主体放置于系统服务,系统就可以对组件和窗口的生命周期,显示状态进行强掌控,这样就能做到在各种状态变更时能做到及时回调通知 所以,创建任何组件,都需要通过RPC通讯到AMS创建 — 第一个hook点 那逻辑...

拿节 2312

Android 消息机制——你真的了解Handler?_android handle消息队列会一直累加吗

ActivityThread通过ApplicationThread和AMS进行进程间通讯,AMS以进程间通信的方式完成ActivityThread的请求后会回调ApplicationThread中的Binder方法,然后ApplicationThread会向H发送消息,H收到消息后会将ApplicationThread中的逻辑切换到ActivityThread中去执行,即切换到主线程中去执行,这个过程就是。是性的爆发还是饥渴的无奈?如果某个消息处理时间过长,就可能会影响UI线程的刷新速率,造成卡顿的现象。

2401_85014296的博客 394

Android面试之百题经典——含Java、数据结构与算法、Android三方面的面试题

Android面试涉及到的知识点相对较多,总结下来,大致分为以下几方面: Java相关:(答案地址) 1、线程中sleep和wait的区别 2、Thread中的start()和run()方法有什么区别 3、关键字final和static是怎么使用的 4、String,StringBuffer,StringBuilder区别 5、Java中重载和重写的区别 6、equals跟...

panshi5188的博客 869
上一篇: Window-animation总结
下一篇: InputWindowInfo从InputMonitor传递到SurfaceFlinger再传递到InputDispatcher
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值