Multi-Window:Android多任务处理模式的本质

作者: IT Sectr 发布日期: 2026-06-08 阅读时间: 10 分钟

Multi-Window — 是Android中的一组多任务处理模式,允许在屏幕上同时运行多个应用程序。系统包括三种模式:Split Screen用于将屏幕分成两部分,Picture-in-Picture用于在小窗口中播放视频,以及Freeform用于在大屏幕上显示任意大小的窗口。根据Android Developers (2025),屏幕宽度为600dp及以上的设备必须支持Multi-Window,每个开发人员都必须使应用程序适应可能的窗口大小变化

要点

  • Multi-Window — Android多任务系统,包含三种模式:Split Screen、PiP、Freeform。
  • Split Screen — 两个应用程序并排,分隔线可拖动,比例可调整。
  • Picture-in-Picture — 在其他应用程序上方的小窗口中播放视频。
  • Freeform — 在Android TV和大屏幕上显示任意大小的窗口。
  • ResizeableActivity — 清单中的标志,用于声明支持多窗口模式。

Android中的Multi-Window是什么?

Multi-Window — 是Android 7.0 Nougat(API 24)中引入的一项功能,允许在屏幕上同时运行两个或更多应用程序。这一模式是Google对平板电脑和大屏设备日益流行的回应,在这些设备上,单任务模式限制了生产力。

在Android 7.0之前,每个应用程序占据整个屏幕——在应用之间切换时,上一个应用会被最小化。Multi-Window改变了这一模式:现在应用程序可以占据部分屏幕并保持活动状态。对于开发人员来说,这意味着onConfigurationChanged和处理大小变化成为强制性的。

在Android 12L(2022)中,Google将Multi-Window设为具有大屏设备的默认模式——平板电脑上的所有应用程序都在允许多窗口的模式下运行。只有清单中明确禁止的应用程序例外。

Multi-Window模式:Split Screen、PiP、Freeform

Split Screen — 最常见的模式。屏幕水平或垂直分成两部分,用户可以拖动分隔线。在手机和平板电脑上可用。通过Overview(Recents)启动——将应用图标拖到上边缘或下边缘。

Picture-in-Picture(PiP) — 适用于视频和导航应用程序的模式。内容显示在一个浮动小窗口(约占屏幕的15–25%)中,可以移动。适用于Android 8.0+。通过Activity中的enterPictureInPictureMode()激活。

Freeform — 任意大小窗口的模式,类似于桌面窗口管理器。适用于Android TV和某些制造商的大屏设备(Samsung DeX)。应用程序在带有标题和控制按钮的窗口中运行。

Multi-Window的工作原理

当用户激活Multi-Window时,Android会为每个应用程序创建一个新的Activity实例并分配可用屏幕空间。Activities被放置在单独的任务(Task)中,但使用相同的StackView,它们之间有分隔线。

系统通过onConfigurationChanged()通知每个Activity大小变化。如果Activity不处理此事件——它将被重新创建(recreate)。对于Split Screen,窗口宽度可能减少到220 dp——平台支持的最小宽度。

Android允许应用程序通过清单中的android:minWidthandroid:minHeight声明最小宽度。如果可用空间小于指定值——Activity进入暂停状态。

使Activity适应多窗口模式

要支持Multi-Window,需要在清单中设置android:resizeableActivity="true"标志。这意味着应用程序可以在窗口变化时调整大小。默认情况下,在Android 12L+上,所有应用程序都被视为resizeable——此标志被忽略。

当窗口大小变化时,Activity可能被重新创建(默认)或在onConfigurationChanged中处理事件(如果在清单中指定了configChanges="screenSize|smallestScreenSize")。建议为关键Activity指定configChanges,以避免状态丢失。

xml
<activity
    android:name=".MainActivity"
    android:resizeableActivity="true"
    android:configChanges="screenSize|smallestScreenSize|orientation" />

对于不支持大小变化的应用程序,Android会显示一个带有警告的对话框。在这种情况下,切换到多窗口模式时,系统可能会终止Activity并显示带有重新启动建议的snackbar

Multi-Window与Activity生命周期

Multi-Window改变了标准的Activity生命周期。当另一个应用程序在相邻窗口中变为活动状态时,当前Activity会收到onPause()调用,但不会收到onStop()——它仍然可见,尽管不在焦点中。这一点很重要:视频播放器应该在onPause时继续播放,而不是在onStop时。

开发人员需要区分状态:onPause + isInMultiWindowMode()= true仅表示失去焦点,而不是离开屏幕。对于视频和动画,这是不停止播放的信号,仅取消控制元素的突出显示。

退出Multi-Window时,onMultiWindowModeChanged()在onResume()之前被调用。这提供了在用户开始交互之前为全屏模式重建界面的机会。

Multi-Window的最佳实践

第一条规则——保持状态。在多窗口模式下,Activity随时可能被重新创建。对于需要在配置更改之间保留的所有数据,使用ViewModel中的SavedStateHandle或onSaveInstanceState。

第二条——在最小宽度220 dp下测试。此值被认为是Split Screen中最窄的窗口。界面必须保持可读性和功能性。如果某些元素超出边界——使用Window Size Class在布局之间切换。

第三条——禁用Multi-Window中不起作用的功能。例如,如果屏幕太小,Camera可能不可用。在启动相机或其他全屏功能之前检查isInMultiWindowMode()。

常见问题

如何为自己的应用程序禁用Multi-Window?

在清单中设置android:resizeableActivity="false"。在Android 12L+上,大屏设备会忽略此标志,因此要完全禁用,请使用android:maxAspectRatio

如何确定应用程序处于Multi-Window模式?

从Activity调用isInMultiWindowMode()。如果应用程序在Split Screen、PiP或Freeform中运行,该方法返回true。您还可以订阅onMultiWindowModeChanged()。

Multi-Window在Android TV上工作吗?

在Android TV上只有Picture-in-Picture模式可用。Split Screen和Freeform不受支持——电视使用带有角落PiP窗口的主屏幕。

在前台服务在Multi-Window中会发生什么?

前台服务会继续运行,无论模式如何。但如果应用程序切换到PiP,系统可能会暂时暂停执行以节省资源。

如何处理窗口之间的拖放(Drag and Drop)?

Android通过ClipData和View.OnDragListener支持Multi-Window中窗口之间的Drag and Drop。数据通过ContentProvider或带有FLAG_GRANT_READ_URI_PERMISSION的Intent传输。

总结

  • Multi-Window — Android多任务处理,具有三种模式,可同时运行应用程序。
  • Split Screen — 将屏幕分成两部分,带有可拖动的分隔线。
  • Picture-in-Picture — 适用于Android 8.0+的小窗口视频。
  • Freeform — 适用于Android TV和Samsung DeX的任意大小窗口。
  • resizeableActivity — 清单中用于模式支持的必需标志。
  • onMultiWindowModeChanged — 进入/退出时重建界面的回调。
  • 结论 — 自2022年起,所有大屏应用程序都必须支持Multi-Window。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读