android 12/13 分屏设置Task的Bounds区域-系统车机开发必学

Android12 车载开发TaskView实现分屏 这里只给出TaskView的代码,相关联的源码,请看源码,如果想要使用TaskView需要自己去编译frameWork的源码,打包一个aar,或者jar出来使用,否则无法直接使用。1.如果分屏的应用如启动两个应用按照权重占比,互相不叠加在一起,点触摸击事件都可响应,例如左边启动QQ了,右边启动的是微信,二者窗口都可操作。TaskView是谷歌整合安卓多任务多窗口下交互重新重构的独立出来的module,本身继承自ServiceView,TaskView的相关概念性的东西参考。//创建的taskview。 阅读详情

hi,近来研究分屏时候发现android 13上的分屏和以前的分屏代码差别比较大
主要区别在于把原来大部分分屏相关业务在systemserver进行的都放入到了systemui进程,对应的代码基本都在:
frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/
这里面进行对应分屏相关的一个业务处理, 比如分割线拖拽对两个分屏大小影响等。最后都会通过包装成WindowContainerTransaction对象,再通过WindowOrganizerController的本地代理,跨进程传递到systemserver的WindowOrganizerController类中进行处理.

大概流程很复杂,这里我这记录一下一个难以表面看出的点,那就是怎么对Task的相关的Bounds进行设置的,这个在以前android版本就直接systemserver的Task或之ActivityStack调用resize就行,但新版本就没有这么容易看出,最后经过打印相关堆栈的调试发现应该设置是如下流程:

02-13 22:27:30.861   560   890 I test    : setBounds change = { mBounds=Rect(0, 0 - 1440, 2960) mAppBounds=Rect(0, 0 - 1440, 2792) mMaxBounds=Rect(0, 0 - 1440, 2960) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0}1046251526 rect Rect(0, 0 - 1440, 810)
02-13 22:27:30.861   560   890 I test    : java.lang.Exception
02-13 22:27:30.861   560   890 I test    : 	at android.app.WindowConfiguration.setBounds(WindowConfiguration.java:294)
02-13 22:27:30.861   560   890 I test    : 	at android.app.WindowConfiguration.updateFrom(WindowConfiguration.java:494)
02-13 22:27:30.861   560   890 I test    : 	at android.content.res.Configuration.updateFrom(Configuration.java:1706)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.ConfigurationContainer.onConfigurationChanged(ConfigurationContainer.java:133)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowContainer.onConfigurationChanged(WindowContainer.java:510)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.TaskFragment.onConfigurationChanged(TaskFragment.java:2260)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.Task.onConfigurationChangedInner(Task.java:1903)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.Task.onConfigurationChanged(Task.java:1976)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.ConfigurationContainer.onRequestedOverrideConfigurationChanged(ConfigurationContainer.java:200)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowContainer.onRequestedOverrideConfigurationChanged(WindowContainer.java:973)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowOrganizerController.applyChanges(WindowOrganizerController.java:534)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowOrganizerController.applyWindowContainerChange(WindowOrganizerController.java:1217)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowOrganizerController.applyTransaction(WindowOrganizerController.java:427)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowOrganizerController.applyTransaction(WindowOrganizerController.java:372)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowOrganizerController.applySyncTransaction(WindowOrganizerController.java:218)
02-13 22:27:30.861   560   890 I test    : 	at android.window.IWindowOrganizerController$Stub.onTransact(IWindowOrganizerController.java:215)
02-13 22:27:30.861   560   890 I test    : 	at com.android.server.wm.WindowOrganizerController.onTransact(WindowOrganizerController.java:163)
02-13 22:27:30.861   560   890 I test    : 	at android.os.Binder.execTransactInternal(Binder.java:1285)
02-13 22:27:30.861   560   890 I test    : 	at android.os.Binder.execTransact(Binder.java:1244)

其实Task的Bounds就是

  @Override
    public void getBounds(Rect bounds) {
        bounds.set(getBounds());
    }
       /**
     * Returns the effective bounds of this container, inheriting the first non-empty bounds set in
     * its ancestral hierarchy, including itself.
     */
    public Rect getBounds() {
        mReturnBounds.set(getConfiguration().windowConfiguration.getBounds());
        return mReturnBounds;
    }

最后就是调用的windowConfiguration.getBounds
在这里插入图片描述

android T分屏流程 android T上对分屏流程进行了重构,之前用WINDOWING_MODE_SPLIT_SCREEN_PRIMARY等windowingMode来判断当前窗口是否分屏已经失效;分屏的触发操作放在了wm shell下,运行在systemui进程;将分屏涉及到的reparent、reorder等系列操作封装到WindowContainerTransaction中通过WindowOrganizer的applyTransaction来通知system server进行相关处理实现分屏。 阅读详情

相关推荐

android13 设置左右分屏修改为单屏幕,应用分屏改为单屏

android13中,系统设置变成,左边是一级菜单,右侧是二级菜单,这样跟我们以前android7/8/9的布局是不一样的,我们需要将它修改为一级菜单,点进去才是二级菜单这种。效果如下。

zhutoubenben的专栏 1219

Android中各种坐标详解

在Android中,系统提供了非常多的方法来获取坐标值,相对距离等。方法丰富固然好,但是也给初学者带来了很多困惑,经常会混淆这些方法的含义。然后我总结了一些API,下面就通过一个图来解释这些坐标方法的作用

NewOrin 790

Android13 双屏设备,设置锁屏时,副屏修改为同显

Android13 双屏设备,设置锁屏时,副屏修改为同显

车载Launcher中TaskView实现地图卡片内嵌的完整原理与实战

在车载系统开发中,地图导航是核心应用,但传统全屏展示会遮挡桌面其他信息。Android任务管理机制允许通过TaskView实现跨任务视图嵌入,将独立运行的导航任务窗口挂载到Launcher的View层级中,既保留地图实时渲染与触摸交互,又实现桌面卡片化展示。其技术原理涉及ActivityTaskManager、WindowManagerService与SurfaceFlinger的协同工作,系统应用可基于TaskView构建高性能的多任务界面。该方案广泛应用于车载桌面、多屏交互及系统级集成场景,能有效解决导

weixin_34414196的博客 485

YOLOv8n模型导出ONNX的避坑指南:解决版本差异,正确生成TensorRT/RKNN所需输出节点

本文详细介绍了YOLOv8n模型导出ONNX格式的实战避坑指南,涵盖版本差异处理、代码修改技巧及TensorRT/RKNN部署优化方案。针对不同推理框架需求,提供输出节点生成、动态轴处理和后处理划分等核心问题的解决方案,帮助开发者高效完成模型部署。

weixin_33247358的博客 357

树莓派4B+WebRTC实现远程监控:5步搞定公网视频流传输(含Node.js配置)

本文详细介绍了如何利用树莓派4B和WebRTC技术,通过5个关键步骤搭建低延迟、高隐私的远程监控系统。重点阐述了WebRTC点对点传输相较于传统方案的优势,并提供了包含Node.js信令服务器配置、树莓派视频流捕获与推送、以及移动端自适应观看页面的完整实现方案,帮助用户实现公网视频流传输。

websocket5live的博客 292

android 获取屏幕中心点_【APP测试】自动化测试常见问题3:通过坐标点击的对象切换屏幕后如何自适应...

APP在自动化测试的时候,通常会遇到这样一个问题:就是通过坐标点击的对象切换屏幕后就适应不了了,还得重新定位、找坐标!下面小编带你看一下如何解决这个问题:1.前提基于win10专业版64位系统+jdk1.8+python3+pycharm+android SDK+appium+unittest。2.痛点通常大家在做APP自动化测试定位元素的时候大都是通过元素的各种属性来完成定位操作的,但有时会出现...

weixin_39630095的博客 815

内网环境下的高德地图离线化实战:从瓦片下载到交互功能集成

本文详细介绍了在内网环境中部署离线高德地图的完整实战方案。针对军工、能源、金融等对网络隔离与数据安全有严格要求的场景,文章核心解决了离线地图的两大基石:地图瓦片数据的高效下载与本地化,以及高德地图JS API的获取与插件集成。通过具体代码示例,进一步讲解了如何实现地图初始化、海量点标注与聚合、自定义图标及框选查询等核心交互功能,并分享了内网部署的路径配置、性能优化及法律合规等关键注意事项,为开发者在封闭网络环境下构建稳定、可控的地图应用提供了清晰指南。

Apple的专栏 394

Android 12 分屏模式配置

默认配置0,当设备尺寸大于config_largeScreenSmallestScreenWidthDp时,就默认应用支持分屏。frameworks\base\core\res\res\values\config.xml中配置了分屏的模式。在做pad项目时,发现很多不支持分屏的应用都被分屏了。导致各种显示异常的bug。1、反编译apk发现,apk本身是不支持分屏的。2、和客户研发沟通,发现是Android 12L的新特性。会根据apk是否支持分屏判断。

纵容的博客 1958

《UVM实战》学习笔记——第三章UVM基础

uvm基础,常见的派生类,config db机制,打印信息等

qq_42135020的博客 5176

定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

已知 Tclk 为 84MHz , 我们需要 Tout 为 200ms 即 200000us , 不妨先让PSC为 839, 带入上述公式可得 ARR = 19999. 这样算出来之后ARR和PSC都在0~65535的范围, 则可以使用这组参数。例如,如果时钟频率为1MHz,并且PSC设置为1000,则实际的定时频率将为1kHz。当重装载值(Period 或 ARR)设置为 500 时,意味着定时器需要计数 500 个时钟周期才会触发中断。例如,如果时钟频率为1MHz,则Tclk为1微秒。

2301_77123899的博客 1万+

一文教你弄懂Android各种坐标

Measure过程确定了View的长、宽。Layout过程结合上一步的长、宽确定了View摆放位置,Draw过程结合上一步的摆放位置绘制出View,这是三者关系。 本篇文章的重点是分析由Layout摆放位置引起的坐标相关知识分析。 通过本篇文章,你将了解到: 1、View坐标基础 2、常用的View获取坐标方法 1、View坐标基础 可以看出与传统的坐标系有所不同的是,屏幕的左上角作为坐标原点,X轴向右为正,Y轴向下为正。 上图分为四个层次,由内到外依次为: 第一层为触摸点MotionEvent 第

m0_46962786的博客 2266

使用 Simulink + Simscape Electrical 对基于VSG控制的背靠背变流器整流侧进行建模与仿真

本文介绍了基于Simulink的直驱风电系统背靠背变流器整流侧虚拟同步发电机(VSG)建模方法。首先阐述了直驱风电系统结构和VSG控制的作用,然后详细指导了模型搭建过程:从创建项目、添加PMSG和变流器模块,到搭建主电路拓扑和实现VSG控制逻辑。重点说明了VSG控制器如何模拟传统同步发电机的特性,并提供了仿真设置和结果分析方法。该模型可用于研究风电系统在不同工况下的响应特性,为新能源发电系统设计提供重要参考。

amy_mhd的博客 180

Android分屏流程分析

安卓分屏流程分析

qq_36063677的博客 6176

用一套可追溯的闭环,把设备变成可管理的资产:SAP S/4HANA Asset Management 模块详解

摘要:SAP S/4HANA的资产管理模块(EAM)通过标准化流程管理企业资产全生命周期,解决资产状态、需求和资源的不确定性。系统将资产抽象为技术对象,支持纠正性和预防性维护流程,通过维护工单实现可执行的工作包,并与物料管理、财务、生产计划等模块集成形成管理闭环。该模块可帮助降低非计划停机时间,通过数据驱动决策优化维护策略,提升资产可用率和运营效率。(149字)

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

对MixPad精灵(触屏语音开关)进行解剖分析

概述 最近有点忙,已经很久没有更新文章了,对不起各位网友啦~ 这次对ORVIBO的新产品:MixPad精灵款的来个剖析,希望对大家有所帮助! 首先,我买了一台对应的设备,直接去官网采购,价格吗还算OK,400多的价格。 拆箱的过程我就不写了,简单的上个图就行了。 一、拆包: 主屏板包装盒(顶部): 主屏板包装盒(底部): 后盖电源部分无内容,我就不拍了,给优快云空间省点存储位置。 二、设备剖析开始 接下来,我们开始对设备进行剖析,步骤如下: 1、拆掉主屏板后盖板,...

LeeKwen的专栏 3944

android 根据bounds坐标进行点击操作_炫酷的Android时钟UI控件,隔壁产品都馋哭了...

废话不多说,先上效果效果酷炫,动画丰富,效果爆炸boom~设计思路看腻了市面上各种丑陋难看的时钟控件,是时候整点新活!将现实生活中的摆钟圆形表盘设计、电子手表的数显表盘设计抽象出来,提取出“圆形”、“数显”、“时光流逝感”等词汇,融合这些词汇特征,把特征赋予最终的UI设计......就这样,一个炫酷的UI控件诞生了!拨动时钟圆盘可以调整时钟,伴随时间的流逝,拨动的圆盘还能自动回位,交互逻...

weixin_29023445的博客 624

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 13分屏源码分析之分割线拖动过程

hi,上一节已经分析完分屏的启动过程,本节开始来介绍分屏使用过程中对分割线的拖动过程。

learnframework的博客 2491

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Statistics and Machine Learning Toolbox

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

Android 16系统源码_分屏模式(二)全屏分屏模式层级树信息

通过对比全屏和分屏模式下的窗口层级树信息,理解分屏模式的实现思路。

AfinalStone的专栏 5517

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分屏功能原理(基于Android12L)

Android分屏功能原理(基于Android12L)分屏功能目的是为了提高用户的生产效率,提高多应用使用的便捷性;Android 很早版本就已经提供了分屏功能,不过随着版本的迭代,特别是Google开始关注Android大屏设备的用户使用体验,内部的实现逻辑也和以前有很大的差别值得注意的是原生Android分屏功能只允许在任务管理器中选择分屏应用,如果应用未打开过,就无法分屏Android13上...

Android技术之家 4335

Android12 窗口模式

Android 窗口模式

ocreativityo的博客 2294

Android 12 强制使用分屏模式

A

jlsheshen的博客 2100

android T 分屏流程之systemui部分/android framework车载车机手机实战开发

hi,上一节已经讲解清楚了分屏在Launcher端的一个启动情况,本节课开始将进行systemui部分的详细讲解: b站免费视频教程讲解: https://www.bilibili.com/video/BV1wj411o7A9/ 回忆上一节launcher端会调用以下方法来调用到systemui端 这里注意最后桌面调用了mSplitScreen.startIntentAndTaskWithLegacyTransition,这里的mSplitScreen就是一个binder代理,会调用到systemui的服务

liaosongmao1的专栏 1748
上一篇: 安卓车机系统adb shell cmd 源码原理分析
下一篇: android 13 WMS/AMS系统开发-SplashScreen的添加与移除分析
千里马学框架
博客等级 码龄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、付费专栏及课程。

余额充值