Android 原生 多屏显示 (分屏) 原理 解析

  • 概述

在 Android 7.0 及更高版本中,用户或开发者可以借助平台原生功能,在设备屏幕上同时显示多个应用,即为:多窗口模式(Multi Window Supports),目前支持多窗口模式以下三种配置:

 

  1. 分屏模式

是多窗口模式的默认模式,在这种模式下,系统会从设备中间以横向或纵向方式划分系统界面,为用户提供两个活动窗格供他们放置应用,即界面显示为横屏左右排列,或者竖屏上下排列,用户可以根据设备的屏幕方向,向左右或上下拖动分界线来调整窗口大小。

uploading.4e448015.gif正在上传…重新上传取消

 

 

 

 

 

 

 

 

  1. 画中画 (Picture In Picture)

Android 8.0开始,应用可以在分屏模式将自身置于画中画模式,能在用户操作其他应用,或与其他应用交互时,继续显示自身内容。

 

uploading.4e448015.gif正在上传…重新上传取消

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 自由窗口

一般用于大屏设备,在这种模式下,允许用户动态自由调整 Activity 窗格大小,并在屏幕上显示两个以上的应用。若启用此功能,设备将同时具有自由窗口模式和分屏模式。

uploading.4e448015.gif正在上传…重新上传取消

 

  • 分屏模式

uploading.4e448015.gif正在上传…重新上传取消

uploading.4e448015.gif正在上传…重新上传取消

uploading.4e448015.gif正在上传…重新上传取消

  1. 生命周期

说到生命周期,问题来了?分屏模式的多窗口响应或操作模式,有没有改变Activity的生命周期?

uploading.4e448015.gif正在上传…重新上传取消

分屏模式 不会更改 Activity 生命周期

官方解释:在多窗口模式下,系统会将用户最近操作或激活过的一个Activity视为顶端 Activity,而且是唯一处于 RESUMED 状态的 Activity(Running)。而所有其他可见的 Activity 均处于 STARTED状态, 而不是 RESUMED 的状态。但是,这些处于可见状态的 Activity,比系统中不可见 Activity 更高的优先级。如果用户与其中一个可见的 Activity 交互,则该 Activity 将处于恢复状态(onResume()),而之前的顶端 Activity 将(onPause())进入 STARTED 状态。

uploading.4e448015.gif正在上传…重新上传取消

生命周期1--失去焦点--获取焦点

当用户将应用切换到分屏模式时,或者当用户调整应用(窗口)大小,再或者将应用恢复到全屏模式时,系统会通知 Activity 发生配置变更(官方用词)。这种变更与系统通知应用设备,从纵向模式切换到横屏模式时的 Activity 生命周期影响基本相同,区别在于设备不仅仅是交换尺寸,而是会变更尺寸。以上场景的切换时,系统会销毁当前Activity,并以新的尺寸重新创建这个 Activity。

uploading.4e448015.gif正在上传…重新上传取消

生命周期2--启动分屏

uploading.4e448015.gif正在上传…重新上传取消

生命周期3--获取焦点--改变窗口大小

uploading.4e448015.gif正在上传…重新上传取消

生命周期4--失去焦点--改变窗口大小

uploading.4e448015.gif正在上传…重新上传取消

生命周期5--退出分屏保留本应用

uploading.4e448015.gif正在上传…重新上传取消

生命周期6--退出分屏保留其他应用

 

 

  1. 应用配置分屏模式

如果你开发的应用的 API 等级为 24及以上 时,就可以应用进行支持分屏模式的配置,在清单文件中的 <activity> 或 <application> 元素中设置以下属性,以启用或停用多窗口模式:

android:resizeableActivity=["true" | "false"]

如果将属性值设置为 true,则 Activity 支持多窗口/分屏模式启动。

如果将属性值设置为 false,则 Activity 不支持多窗口/分屏模式。

如果属性值为 false,且用户尝试在多窗口模式下启动 Activity,则该 Activity 将全屏显示。

另外,主/根 Activity 的分屏属性的设置,适用于同一任务栈中的所有 Activity。也就是说,如果主/根 Activity 已将 android:resizeableActivity 设置为 true,则任务栈中的所有 Activity 均可调整大小。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android原生开发是指使用Android SDK提供的工具和API,使用Java或Kotlin编写应用程序的开发方式。与使用跨平台框架如React Native或Flutter进行开发不同,原生开发可以充分利用Android设备的特性和功能,提供更好的性能和用户体验。 Android原生开发的优势在于可以直接调用系统提供的各种功能与服务,如摄像头、传感器、定位、通知等,使得应用程序能够更好地与硬件进行交互。此外,Android原生开发可以充分利用Android SDK中提供的广泛的API,包括UI组件、多媒体、网络、数据库等,以及许多第三方库和插件,使得开发过程更加灵活和高效。 Android原生开发的另一个重要特点是可以适应不同的设备和屏幕尺寸,通过适配不同的布局、样式和分辨率,使得应用程序在各种设备上都能够良好地运行和展示。此外,原生开发还可以充分利用设备的性能和资源,提供更好的响应速度和流畅度。 然而,Android原生开发也存在一些挑战。首先,与使用跨平台框架相比,原生开发需要更多的学习和了解Android系统和API的知识,对开发者的技术要求较高。其次,对于需要在多个平台上开发的应用程序来说,原生开发需要分别开发和维护各个平台的代码,增加了开发的复杂性和工作量。最后,由于Android系统的不断更新和改进,原生开发需要及时跟进和适应新的API和特性,对开发者来说可能需要持续的学习和更新。 总之,尽管Android原生开发需要具备一定的技术功底和对Android系统的了解,但它可以充分利用Android设备的特性和功能,提供更好的性能和用户体验,适应不同的设备和屏幕尺寸。对于注重性能和用户体验的应用程序来说,原生开发是一种值得选择的开发方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值