Android将启动画面实现迁移到 Android 12 及更高版本

如果在 Android 11 或更低版本中实现自定义启动画面,请迁移应用迁移到 SplashScreen API 以获取帮助 确保其在 Android 12 及更高版本中正确显示。

从 Android 12 开始,在所有应用的冷启动和温启动期间,系统都会应用 Android 系统的默认启动画面。默认情况下 该系统启动画面是使用应用的启动器图标元素构建的 以及windowBackground 主题(如果它是单色)。

如果不迁移应用,则 Android 12 和 Android 12 上的应用启动体验会受到影响 可能会降级,或出现意外结果。

  • 如果现有的启动画面是使用 替换 android:windowBackground 的自定义主题, 系统会将自定义启动画面替换为默认的 Android 系统 Android 12 及更高版本上的启动画面。这可能不是应用的预期 体验。

  • 如果现有启动画面是使用专用 Activity 实现的,那么在搭载 Android 12 或更高版本的设备上启动应用会导致系统重复显示启动画面,也就是先显示系统启动画面,接着显示现有的启动画面 activity。

如要避免这类降级或意外体验,可以完成 迁移过程。迁移完成后,该 API 缩短启动时间,让完全掌控启动画面体验, 还能打造与平台上其他应用更加一致的启动体验。

SplashScreen compat 库

可以直接使用 SplashScreen API,但我们强烈建议改用 Androidx SplashScreen compat 库。该 compat 库使用 SplashScreen API,能够向后兼容,并可在所有 Android 版本上显示外观和风格一致的启动画面。本文档便是基于 compat 库编写的。

如果直接使用 SplashScreen API 进行迁移,在 Android 11 及更低版本上,启动画面看起来与迁移前完全一样。开始日期 Android 12 时,启动画面具有 Android 12 的外观和风格。

如果使用 SplashScreen compat 库进行迁移,则系统会显示 在所有 Android 版本上都应用相同的启动画面。

迁移启动画面实现

只需完成以下步骤,便可将现有的启动画面实现迁移到 Android 12 及更高版本。

此过程适用于要从中迁移的任何类型的实现。如果要从专用 Activity 迁移,请按照本文所述的最佳实践来调整自定义启动画面 ActivitySplashScreen API 还可减少启动 延迟。

如需迁移启动画面,请执行以下操作:

  1. 在 build.gradle 文件中,更改 compileSdkVersion,并在依赖项中添加 SplashScreen compat 库。

    build.gradleandroid {compileSdkVersion 31...
    }
    dependencies {...implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. 创建一个父主题为 Theme.SplashScreen 的主题。将 postSplashScreenTheme 的值设置为 Activity 必须使用的主题,并将 windowSplashScreenAnimatedIcon 的值设置为可绘制对象或带动画的可绘制对象。其他属性可视需要进行设置。

    <style name="Theme.App.Starting" parent="Theme.SplashScreen"><!-- Set the splash screen background, animated icon, and animationduration. --><item name="windowSplashScreenBackground">@color/...</item><!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animateddrawable. One of these is required. --><item name="windowSplashScreenAnimatedIcon">@drawable/...</item><!-- Required for animated icons. --><item name="windowSplashScreenAnimationDuration">200</item><!-- Set the theme of the Activity that directly follows your splashscreen. This is required. --><item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
    

    如果要在图标下添加背景颜色,可以使用 Theme.SplashScreen.IconBackground 主题及设置 windowSplashScreenIconBackground 属性。

  3. 在清单中,将启动 activity 的主题替换为所需的主题。 创建 Deployment

    <manifest><application android:theme="@style/Theme.App.Starting"><!-- or --><activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. 在启动 activity 中,先调用 installSplashScreen,然后再调用 super.onCreate()

    class MainActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {// Handle the splash screen transition.val splashScreen = installSplashScreen()super.onCreate(savedInstanceState)setContentView(R.layout.main_activity)
    ...

installSplashScreen 会返回启动画面对象,可以根据需要使用该对象自定义动画,或让启动画面在屏幕上显示更长时间。如需详细了解如何自定义动画,请参阅让启动画面在屏幕上显示更长时间和自定义用于关闭启动画面的动画。

根据启动画面调整自定义启动画面 activity

迁移到适用于 Android 12 及更高版本的启动画面后,请决定如何处理之前的自定义启动画面 Activity。可以选择以下任一方式:

  • 保留自定义 activity,但不让它显示。
  • 出于品牌推广原因保留自定义 activity。
  • 移除自定义 activity,然后根据需要来调整应用。

禁止显示自定义 activity

如果旧启动画面 Activity 主要用于路由,请考虑移除它的方法。例如,可以直接链接到 activity 或移至具有子组件的单个 activity。如果 可行,可以使用 SplashScreen.setKeepOnScreenCondition 将路由 activity 保留到位,但使其停止渲染。执行此操作 将启动画面传输到下一个 activity,并支持流畅 过渡效果。

  class RoutingActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {val splashScreen = installSplashScreen()super.onCreate(savedInstanceState)// Keep the splash screen visible for this Activity.splashScreen.setKeepOnScreenCondition { true }startSomeNextActivity()finish()}...

出于品牌推广原因保留自定义 activity

如果想出于品牌推广原因使用之前的启动画面 Activity,则可以通过自定义用于关闭启动画面的动画,从系统启动画面转换到自定义启动画面 Activity。不过,最好尽可能避免这种情况,并使用 SplashScreen 通过 API 为启动画面添加品牌信息。

如果需要显示对话框,我们建议在后续的自定义启动画面 activity 上方或在系统启动画面后的主 activity 上方显示对话框。

移除自定义启动画面 activity

通常,我们建议移除之前的自定义启动画面 Activity 这样既能避免重复的启动画面,又能提高效率 并缩短启动画面加载时间。可以使用以下不同的方法来避免显示多余的启动画面 activity。

  • 对组件、模块或库使用延迟加载。避免加载或初始化应用在启动时不需要的组件或库。在应用需要时再加载它们。

    如果应用确实需要某个组件才能正常运行,那么请仅在真正需要的时候才加载,而不要在启动时加载,或者在应用启动后使用后台线程进行加载。请尽量让 Application.onCreate() 轻装上阵。

    还可以使用 App Startup 库,用于初始化组件 。执行此操作时,请确保仍然加载所有 启动 activity 所需的模块,并且不会在 延迟加载的模块可供使用

  • 在本地加载少量数据时创建占位符。使用推荐的主题方法,并在应用准备就绪之前暂不显示。如需实现向后兼容的启动画面,请遵循 概述的 让启动画面在屏幕上显示更长时间。

  • 显示占位符。对于持续时间不确定的基于网络的负载: 关闭启动画面并显示异步加载的占位符。 考虑在内容区域应用巧妙的动画效果来反映加载状态。务必让所加载内容的结构与框架结构尽可能保持一致,以便在内容加载后顺利过渡。

  • 使用缓存。当用户首次打开应用时,可以显示某些界面元素的加载指示标志,如下图所示。通过 当用户下次返回应用时,可以在 加载更新的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

692. 前K个高频单词(map的练习)

目录 1、题目分析 2.解题思路 3.代码实现 4.总结 1、题目分析 2.解题思路 首先它给出我们一个string&#xff0c;让我们提取出它们中出现次数最多的。利用map将word一个一个存入其中&#xff0c;没有就插入&#xff0c;有了就1&#xff0c;这样我们就得到了key_value&#…

如何创建极狐GitLab 议题?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 创建议题 (BASIC ALL) 创建议题时&#xff0c;系统会提示您输入议题的字段。 如果您知道要分配给议题的值&#xff0c;则可…

day32 学习笔记

文章目录 前言一、霍夫变换二、标准霍夫变换三、统计概率霍夫变换四、霍夫圆变换 前言 通过今天的学习&#xff0c;我掌握了霍夫变换的基本原本原理及其在OpenCV中的应用方法 一、霍夫变换 霍夫变换是图像处理中的常用技术&#xff0c;主要用于检测图像中的直线&#xff0c;圆…

图解YOLO(You Only Look Once)目标检测(v1-v5)

1. YOLO系列整体介绍 YOLO属于深度学习经典检测方法中的单阶段&#xff08;one - stage&#xff09;类型&#xff0c;与两阶段&#xff08;two - stage&#xff0c;如Faster - rcnn、Mask - Rcnn系列&#xff09;方法相对。 不同模型性能 单阶段方法的最核心优势是速度非常快…

C# 类型、存储和变量(静态类型和dynamic关键字、可空类型)

本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 静态类型和dynamic关键字 你可能巳经注意到了&#xff0c;每一个变量都包括变量类型。这样编译器就可…

信奥赛之c++基础(初识循环嵌套与ASCII密码本)

🎠 游乐园编程奇遇记——循环嵌套与ASCII密码本 🎡 第一章:摩天轮与旋转木马——循环嵌套 🎪 游乐场里的双重循环 for(int 排数=1; 排数<=3; 排数++){// 外层循环像摩天轮for(int 座位=1; 座位<=5; 座位++){// 内层循环像旋转木马cout << "🎪"…

Spine 动画教程:皮肤制作

一、前言 搁了很久的抖音直播小玩法开发&#xff0c;最近又让我想起来了。由于是初次尝试&#xff0c;所以我将开发费用的预算降到为零。不但不买服务器采用 UnitySDK 的指令直推&#xff0c;而且游戏的资产也用 AI 生成&#xff0c;主打省时又省钱。 但是图片有了&#xff0…

论文阅读笔记——π0.5: a Vision-Language-Action Model with Open-World Generalization

π0.5 论文 通过异构数据协同训练与分层推理&#xff0c;用中等规模的目标数据&#xff08;400小时&#xff09;实现了大规模泛化能力&#xff0c;为现实世界机器人学习提供了新范式。 高层推理(high-level) 根据当前观测和任务指令预测子任务&#xff08;如“打开抽屉”&…

记录搭建自己应用中心

记录搭建自己应用中心 应用架构主应用-管理中心系统文件系统子应用 日志系统日志系统前端日志系统后端 用户系统接入使用暂未完成 研发管理需求面板消息推送任务分配应用发布 应用架构 一直想做个试试&#xff0c;这是一个简易版的&#xff0c;主要是整合下知识的&#xff0c;…

【网工第6版】第5章 网络互联⑦

目录 ▲ 路由协议OSPF ◎ OSPF简介 ◎ OSPF特点 本章重要程度&#xff1a;☆☆☆☆☆ ▲ 路由协议OSPF ◎ OSPF简介 OSPF(Open Shortest Path First,开放式最短路径优先协议)是目前应用最广泛的路由协议。 OSPF是一种内部网关协议IGP&#xff0c;也是链路状态路由协议&am…

5.3 Dify:低代码平台,适用于企业快速部署合规AI应用

Dify作为一款开源低代码平台&#xff0c;已成为企业快速构建和部署合规AI应用的首选工具。Dify通过整合后端即服务&#xff08;Backend-as-a-Service, BaaS&#xff09;、大型语言模型操作&#xff08;LLMOps&#xff09;以及直观的视觉化界面&#xff0c;显著降低了AI应用开发…

AI 编程工具:Augment Code

Meet Augment Agent: Your AI pair programmer that deeply understands your codebase, and learns as you work Augment 是开发人员AI平台&#xff0c;它可以帮助您理解代码、调试问题&#xff0c;并更快地发布&#xff0c;因为它了解您的代码库。使用聊天、Next Edit和Augme…

vc++ 如何调用poco库

1. 下载并安装 Poco 库 你可以从 Poco 的官方网站&#xff08;POCO C Libraries - Simplify C Development &#xff09;下载其源代码压缩包。下载完成后&#xff0c;按照下面的步骤进行编译和安装&#xff1a; 解压源代码&#xff1a;把下载的压缩包解压到指定目录。配置编译…

浅谈OpenAIClaude LLM Tools的额外配置

前言 https://platform.openai.com/docs/guides/function-calling?api-modechat&strict-modedisabled#additional-configurationshttps://docs.anthropic.com/en/docs/build-with-claude/tool-use/overview#forcing-tool-use tool_choice “none” 就是不用tools&#x…

SystemWeaver详解:从入门到精通的深度实战指南

SystemWeaver详解&#xff1a;从入门到精通的深度实战指南 文章目录 SystemWeaver详解&#xff1a;从入门到精通的深度实战指南一、SystemWeaver环境搭建与基础配置1.1 多平台安装全流程 二、新手必学的十大核心操作2.1 项目创建全流程2.2 建模工具箱深度解析 三、需求工程与系…

力扣DAY68 | 热100 | 寻找两个正序数组的中位数

前言 困难 ○ 这题搞了3天实在太难了&#xff0c;本质就是每次排除k/2个数&#xff0c;直到找到第k个数。 题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为…

Linux常见故障:排查思路与错误分析指南

引言 当Linux系统"生病"时&#xff0c;它不会说话但却会通过各种症状"求救"&#x1f198;&#xff01;本文将带你建立系统化的故障排查思维&#xff0c;从磁盘到内存&#xff0c;从网络到服务&#xff0c;全方位掌握Linux系统的"把脉问诊"技巧。…

深度解析:从12306看混合云架构下的高并发系统设计

作为曾参与12306余票查询系统高并发升级的技术从业者&#xff0c;笔者注意到公众对于12306底层技术常存在认知盲区。为破解这一迷思&#xff0c;特此分享十年前的架构解密文献&#xff08;该技术之前名叫 gemfire 现已晋升为Apache顶级项目Geode&#xff0c;代码库详见&#xf…

华为Pura X的智控键:让折叠机体验更上一层楼的设计

还记得Mate 70系列刚出那会&#xff0c;我体验了下智控键&#xff0c;那时候就觉得这个“把快捷方式做进电源键”的交互方式非常惊艳&#xff0c;没想到在Pura X上&#xff0c;这种便捷体验感更上了一层楼。 智控键&#xff1a;折叠屏手机的天选快捷方式&#xff1f; 传统折叠…

springboot如何管理多数据源?

静态多数据源管理 配置多个数据源 :创建多个数据源的配置类,通常使用 @ConfigurationProperties 注解来绑定配置文件中的数据源属性,并通过 @Bean 注解定义多个 DataSource Bean 。例如: 配置类: @Configuration public class DataSourceConfig {@Bean(name = "prima…