安卓启动画面持续时间

6

每次用户打开应用程序时,我们使用启动画面来显示公司标志。目前,我们将启动画面显示3秒。

以下是代码:

private static int SPLASH_TIME_OUT = 3000;      // Delay of 3 Seconds

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);


        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                // This method will be executed once the timer is over
                Intent i = new Intent(SplashScreenActivity.this, AnotheActivity.class);
                startActivity(i);
                // close this activity
                finish();
            }
        }, SPLASH_TIME_OUT);
    }
}

但是这个启动画面的持续时间只是团队随意选择的。我们知道,在Android应用程序生态系统中,启动画面通常并不被鼓励使用,但由于这是我们应用程序的需求,因此它被实现了。

我的问题:有没有关于选择正确的启动画面持续时间的标准Android指南/最佳实践?


如果在这三秒钟内你什么都不做,那为什么还要显示它呢?这是我们应用的需求,那这个需求是什么? - Tim
@TimCastelijns 同意。应用程序在此期间不执行任何操作。我们可能会选择在未来删除此功能。 - AADProgramming
在我看来,这是一个与产品相关的决策,应该由产品人员来决定。 - Blackbelt
@AADTechnical 这里有不同的意见,但我真的认为启动画面没有任何问题。我们广泛地为客户使用它(用于品牌推广),标准持续时间为2.5秒(2500毫秒),这对我们来说效果很好。需要注意的是,在此期间我们执行一些启动后台工作,通常需要大约一秒钟的时间。另外,无关紧要,但请确保调用 yourHandler.removeCallbacksAndMessages(null),以确保在启动画面时用户退出应用程序后不会启动以下活动。 - Abhijit
@Abhijit,你说得对。人们有不同的意见。我的意图是了解开发者社区中是否存在任何常见的最佳实践来处理启动画面。无论如何,大多数开发者似乎都同意,启动画面还有其他替代方案可供选择,在未来的构建中我们可以选择其他方案。 - AADProgramming
显示剩余6条评论
4个回答

9
更好的选择是使用一个自定义主题的启动画面活动,然后启动主内容活动。这样就不需要使用计时器了,因为当应用程序准备好时,它会切换到主要内容,并同时显示主题内的图片。
以下是如何操作的教程 - https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 教程中的主要部分:
<activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme"> THEME HERE!!!
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>


public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

<style name="SplashTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowBackground">@drawable/splash</item>

</style>


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

    <item
        android:drawable="@color/black"/>

    <item>

        <bitmap

            android:gravity="center"
            android:src="@drawable/logo_image"/>

    </item>

</layer-list>

甚至可以将样式添加到应用程序中,无需使用单独的活动。


据我所见,似乎没有标准规定启动画面的持续时间。因此,我们可以使用替代方案来代替启动画面,而您的解决方案看起来很适合这种情况。 - AADProgramming
@MikelisKaneps 这是最好的解决方案之一。这是创建启动画面的最佳方法。它减少了应用程序打开时间,并立即显示活动。谢谢 - M DEV

2
启动画面是不好的实践,如果可以不使用它,请避免使用启动画面。您可以阅读一些关于此的文章link1link2
但是如果需要显示启动画面,则可以通过创建自定义主题来覆盖android:windowBackground,然后在调用super.onCreate()之前将该自定义主题替换为您的标准主题。这里是实现和详细说明的tutorial
假设您有一个名为AppTheme的主题,则您的启动器主题应为: <style name="AppTheme.Launcher"> <item name="android:windowBackground">@drawable/launch_screen</item> </style> 然后在AndroidManifest.xml中使用android:theme="@style/AppTheme.Launcher"将主题应用于您的活动。回到正常主题的最简单方法是在super.onCreate()和setContentView()之前调用setTheme(R.style.AppTheme): public class MyMainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // 确保在调用super.onCreate之前 setTheme(R.style.Theme_MyApp); super.onCreate(savedInstanceState); // ... } }

2
有时候,这是必要的。例如:在应用程序启动之前加载所有图形或创建数据库。 - Phantômaxx
如果不必要地使用,它可能会有坏处,但在某些情况下是必要的,而且如果使用得当,它可以用来加强您的品牌形象! - varunkr
但如果有必要,这是大多数有意识的开发人员的情况,该怎么办呢? - Phantômaxx
当然,我理解这个,并且我写了如何在需要时更好地使用它的方法。 - Volodymyr

1
谷歌的指导方针非常明确。仅在必要时使用启动画面。(如果您没有任何内容向用户展示)它应该只可见,直到您有一些数据要显示。如果您浏览谷歌应用程序,很少会看到启动画面。有更聪明的方法来为您的应用品牌定制。您可以在这里找到更多数据。

只有在必要的情况下才这样做,这也是我们大多数时候所做的。例如:在应用程序启动之前加载图形或创建数据库。 - Phantômaxx
在所有内容加载完成之前,只显示它,不要固定时间显示。 - Vladimir Jovanović
这正是原帖所要求的。 - Phantômaxx

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接