如何以正确的方式制作启动画面,即不使其成为应用程序流程的一部分?

Posted

技术标签:

【中文标题】如何以正确的方式制作启动画面,即不使其成为应用程序流程的一部分?【英文标题】:How to make a Splash screen the proper way i.e. not to make it a part of the app process? 【发布时间】:2021-11-09 23:55:09 【问题描述】:

我是安卓新手。我想在我的应用程序中添加启动画面。我经历了这个official documentation。

它说

当用户在应用进程未运行(冷启动)或 Activity 尚未创建(热启动)时启动应用时,会发生以下事件。 (热启动期间从不显示启动画面。) 1) 系统使用您定义的主题和任何动画显示启动画面。 2) 应用准备就绪后,启动画面消失并显示应用。

尽管像下面给出的代码 sn-p 那样将 Activity 实现为启动屏幕可以完成这项工作

class SplashScreenActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_splash_screen)

        supportActionBar?.hide()

        Handler(Looper.getMainLooper()).postDelayed(
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            finish()
        , 2000)
    

但我想这不是传统的方式,因为启动画面成为应用程序进程的一部分,它在几毫秒长的黑屏后开始。

我猜这是系统获取应用程序数据资源的时候,并且应该启动启动画面,至少这就是 Google play storeWhatsapp 或其他所有已安装的应用程序都会立即启动启动画面。

现在,正如文档所坚持的那样,当我尝试设置主题属性时,我收到错误消息Cannot resolve symbol 'android:windowSplashScreenBackground'。这是我的 style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="Theme.Books" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>

        <!-- Unresolved -->
        <item name="android:windowSplashScreenBackground">@color/black</item>
        <item name="android:windowSplashScreenAnimationDuration">1000</item>
        <item name="android:windowSplashScreenAnimatedIcon">@drawable/books_logo</item>
    
    </style>
</resources>

所以, 1。如何克服这个问题?

2。还有其他方法吗?

3.我错过了什么吗?有没有办法以某种方式将活动与应用进程分离?

感谢任何形式的帮助。谢谢!

【问题讨论】:

【参考方案1】:

您是否尝试过关注这篇文章?

Implementing Core Splashscreen API

我从教程中得到了什么:

你需要在setContentView(R.id.***)之前调用installSplashScreen()

您需要修改文章中所示的styles.xml,使用自定义SplashScreen属性(然后将App Theme设置为那个)see here

只需删除您的 SplashScreenActivity,使用 Handler.postDelayed 也不是处理此问题的好方法(库自己处理切换显示的内容,只需使用您的 MainActivity)

【讨论】:

简短而准确,这篇文章比官方的有用得多。非常感谢你! 没问题,也是我环顾四周时的外卖。唯一可能有帮助的是这个迁移指南(比...创建指南更详细)developer.android.com/about/versions/12/splash-screen-migration

以上是关于如何以正确的方式制作启动画面,即不使其成为应用程序流程的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

更改未选择的标签栏项目图像的颜色而不使其成为原始图像

如何将图像放在后面而不使其成为背景图像?

SQLAlchemy:如何在不使其成为主键的情况下使整数列 auto_increment (且唯一)?

将 Typescript 与 Laravel 和 Vue.js 一起使用,导入不使其成为 Vue 组件?

PhoneGap 没有为 iOS 加载正确的图标/启动画面

如何在 ios 7 和 ios6 中显示启动画面