Android从N(7.0)开始正式支持了多窗口(分屏),所谓多窗口,通俗来讲,就是同一时刻,用户可以看到一个以上的应用界面并与之进行交互,这就跟我们平常使用PC的操作系统一样,可以极大地提高操作效率,这对于大屏幕的手持设备来讲更为重要。
本文将讲解分屏的架构设计,旨在从一个比较高的角度将原生的分屏原理讲的通俗透彻。因本文不会对一些Android的基础知识展开描述,请自行补足Activity、Window、Task等概念,另外对于分屏相关的APK开发文档,请参考官方网站。
分屏的交互
要理解分屏的设计,首先要清楚它的交互(这个功能要做成什么样),主要的交互如下:
- 只有可分屏的应用才能进入分屏模式,假设A和B是可以分屏的两个应用
- 对于A和B,可通过在多任务中拖动其到上半屏进入分屏模式
- 下半屏可通过点击另一个分屏应用进入
- 对于A或B,切换到应用内的另一个界面,依然是分屏模式
- 假设A跟B已经分屏,按Home键退出后,点击可分屏的C应用,此时将是A和C分属上下屏
- 拖动中间的调节杠可以调整上下屏的大小
综上,我们大概可以得出如下基本结论:
- 应用可以向系统表达自己是否支持分屏,若支持则必须遵循一些规则
- 系统要标识分屏应用在屏幕上的位置及尺寸
- 分屏应用的位置和尺寸要能动态改变
- 系统应该为应用尺寸的改变提供必要的支持,以支撑其绘制出适配新尺寸的UI
关于第1点,相当于界定责任方。因为不管系统以什么样的方式来实现分屏,势必要求应用根据规则做一些适配,而应用当然可以选择不遵循,那么系统也就不提供其进入分屏的机会;而一旦应用声明支持分屏,就必须进行适配并遵守规则。因此这点只是进入分屏的一个限定条件,跟具体的实现无关,不做过多讨论,接下来只讨论后面几点。
Android对界面的抽象
在接下来的分析之前,我们必须先了解Android如何抽象界面的管理,Android自诞生以来基本都维持了一样的管理方式,任何界面相关的特性必然都建立在这套基础之上,抽象出主干的东西有助于我们更好地理解问题。
对应用开发者来说,最熟悉的莫过于Activity,Activity就是界面最小的抽象单位(但可以不显示)&#