java - 安卓启动屏幕

标签 java android android-intent splash-screen

我正在构建一个 Android 应用程序,它根据 firebase 值在启动时打开不同的 Activity 。现在,我有一个仅包含我的 Logo 的 Activity ,它确定在其 onCreate 方法中转到哪个 Activity 。问题是,由于冷启动,启动应用程序时我仍然会出现半秒白屏。有没有办法创建一个带有我的 Logo 的启动屏幕,该屏幕将根据返回的 firebase 值打开相应的 Activity 并替换默认的白屏?有点像 WhatsApp 或 Instagram 如今所做的事情。我知道我可以更改 styles.xml 中的窗口背景,但这并不理想,因为它会更改所有位置的背景,并且仍然无法确定在启动时立即打开哪个 Activity

最佳答案

您无需更改所有窗口的背景。为了立即显示启动屏幕,请考虑仅为启动屏幕 Activity 使用自定义主题。像这样的事情:

Styles.xml

<style name="SplashTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/splash_drawable</item>
</style>

启动 Activity 屏幕布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/splashLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:screenOrientation="portrait"
    android:theme="@style/SplashTheme">

    <ProgressBar
        android:id="@+id/splash_activity_progress"
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:indeterminate="true"/>
</FrameLayout>

这将为您提供一个带有可绘制对象(应用程序 Logo )的启动屏幕。进度条让用户知道正在进行一些后台操作。

要查询 Firebase,您应该使用 AsyncTask/Coroutine/Executor,以便操作在后台线程中执行并且 UI 线程不会被阻塞。这对于避免 ANR 非常重要。

考虑到有可能 AsyncTask getting deprecated ,我建议您考虑使用 Kotlin 协程/Java 执行器框架而不是 AsyncTasks。

关于java - 安卓启动屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926159/

相关文章:

android - 如何删除只有文本的 actionbar menuItem 之前的分隔符?

android - 我们如何设置折叠底部的最小高度

android - 如何锁屏 Android

java - GWT - 实现水平导航栏的最佳方法

java - 为什么我的 Spring Boot Web 应用程序无法加载其配置属性?

java - 如何从 JSONArray 中删除特定元素?

Android OpenCV 致命信号 11,(错误的编码习惯?)

java - 启动 Activity 别名的 Intent

android - 拍照 Intent ,不懂路径

java - 在 Java 中,我应将 Timer 类事件监听器附加到哪些对象?