Android8.0多窗口调研

本文深入探讨了Android8.0的多窗口功能,包括全屏、分屏、画中画和FreeForm模式。文章分析了多窗口涉及的ActivityManagerService、WindowManagerService和Input模块,并详细阐述了多窗口的实现原理、关键函数以及不同模式间的切换逻辑。此外,还讨论了Android与其他OS在多窗口处理上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android8.0多窗口调研

一、概述

Android8.0上面原生的多窗口功能支持四种模式:全屏、分屏、画中画、FreeForm模式。多窗口主要涉及ActivityManagerServiceWindowManagerServiceInput三个模块。以下分析基于Android8.0代码。

二、原理框架

Android原生多窗口是多Stack方案,即存在多个ActivityStackActivityStack是一个抽象的栈,每个栈都有自己的屏幕区域boundidActivity是以Task方式组织并放在某一个Stack中的。比如,LauncherRecents属于id=HOME_STACK的栈中。8.0主要涉及以下:

HOME_STACK_IDFULLSCREEN_WORKSPACE_STACK_IDFREEFORM_WORKSPACE_STACK_IDDOCKED_STACK_IDPINNED_STACK_IDRECENTS_STACK_IDASSISTANT_STACK_ID

AMSWMS中对Stack分别用ActivityStackTaskTack描述,通过StackId来映射。对Task分别用TaskRecordTask描述,通过TaskId来映射。

每个Activity显示在所属ActivityStackbound区域内,多个Activity显示在各自ActivityStackbound区域内,这样就可以实现多窗口。但是FreeForm模式下,Activitybound由所属Task决定,而非Stack。多窗口不仅仅是控制Activity放入不同ActivityStack中,同时还要改变Activity的生命周期,即FocusActivityresume状态,其他可见ActivityPause状态,并不会进入Stop状态。

整个系统中只会有一个FocusStack,一个FocusActivity。用户在哪个Activity中操作,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值