如何以正确的方式制作闪屏,即不让它成为应用程序进程的一部分?

How to make a Splash screen the proper way i.e. not to make it a part of the app process?(如何以正确的方式制作闪屏,即不让它成为应用程序进程的一部分?)

本文介绍了如何以正确的方式制作闪屏,即不让它成为应用程序进程的一部分?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Android的新手。我想在我的应用程序中添加一个闪屏。我经历了这个official documentation。

上面写着

如果用户在应用程序的进程未运行(冷启动)或活动尚未创建(热启动)的情况下启动应用程序,则会发生以下事件。(在热启动期间不会显示启动画面。)1)系统使用您定义的主题和任何动画显示启动画面。2)当应用程序准备就绪时,闪屏关闭并显示应用程序。

尽管将活动实现为闪屏(如下面给出的代码片段)确实有效

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商店或Whatsapp或其他所有安装的应用程序都是这样做的,闪屏启动是即时的。

现在,正如文档所坚持的那样,当我尝试设置主题属性时,我收到错误消息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.我是否遗漏了什么?是否有某种方法可以将活动与应用程序进程分离?

任何形式的帮助都是非常感谢的。谢谢!

推荐答案

您是否尝试过阅读本文?

Implementing Core Splashscreen API

我从教程中学到的东西:

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

如本文所示,您需要使用自定义SplashScreen属性(然后将App主题设置为该属性)see here

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

这篇关于如何以正确的方式制作闪屏,即不让它成为应用程序进程的一部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何以正确的方式制作闪屏,即不让它成为应用程序进程的一部分?

基础教程推荐