【问题标题】:Android Splash screen durationAndroid 启动画面时长
【发布时间】:2016-05-13 11:10:35
【问题描述】:

每次用户打开应用时,我们都会使用启动画面显示公司徽标。目前,我们正在显示 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 指南/最佳实践来选择正确的初始屏幕持续时间?

【问题讨论】:

  • 如果你在那 3 秒内什么都没做,为什么还要表现出来呢? 这是我们应用的需要,需要什么?
  • 是否有任何标准的 Android 指南/最佳实践来选择正确的初始屏幕持续时间。正如您所说,不鼓励,您为什么期望不鼓励的最佳实践
  • @Blackbelt 因为它在 Android 中如此常见,所以!但没关系,如果没有这样的基准。
  • @TimCastelijns 同意。在那段时间里,应用程序不做任何事情。我们将来可能会选择删除它。
  • 在我看来,这是一个与产品相关的决定,应该由产品的人来决定

标签: android timer splash-screen


【解决方案1】:

更好的选择是使用带有自定义主题的启动屏幕活动,它启动主要内容活动。有了这个,就不需要使用计时器,因为它会在应用程序准备好时切换到主要内容,同时显示主题内的图片。

这里是如何做到这一点的教程 - 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>

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

【讨论】:

  • 如我所见,没有标准。似乎启动画面的持续时间应该是多少。因此,我们可能会使用 splash 的替代方法,我猜您的解决方案看起来很适合。
【解决方案2】:

闪屏是不好的做法,当可能不使用它时,请避免使用闪屏。你可以阅读一些关于这个link1link2的文章。

但如果需要通过创建覆盖android:windowBackground 的自定义主题而不是使用来显示启动画面,则在调用super.onCreate() 之前将该自定义主题替换为您的标准主题。这里是tutorial的实现和详细说明。

假设您有一个名为 AppTheme 的主题,您的启动器主题将是:

<style name="AppTheme.Launcher"> <item name="android:windowBackground">@drawable/launch_screen</item> </style>

然后使用 android:theme="@style/AppTheme.Launcher". 将您的主题应用于 AndroidManifest.xml 中的活动

转换回正常主题的最简单方法是在 super.onCreate() 和 setContentView() 之前调用 setTheme(R.style.AppTheme):

public class MyMainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Make sure this is before calling super.onCreate setTheme(R.style.Theme_MyApp); super.onCreate(savedInstanceState); // ... } }

【讨论】:

  • 有时,这是一种需要。即:在应用启动之前加载所有图形或创建数据库。
  • 如果不必要地使用,它可能会很糟糕,但在某些情况下它是必要的,而且它可以用来加强你的品牌,显然如果使用方法正确!!
  • 但是如果有必要,大多数有意识的开发人员都是这样吗?
  • 当然,我明白这一点,我写了如何在您需要时更好地使用它
【解决方案3】:

Google 指南非常明确。 仅在必须时才使用启动画面。 (如果您没有任何东西要向用户显示)它应该只有在您有一些数据要显示之前才可见。 如果您使用 Google 应用程序,您将在后面看到一个启动画面。 有很多更聪明的方法可以为您的应用程序品牌化。 您可以找到更多数据here

【讨论】:

  • ... only if you must 这就是我们主要这样做的原因。即:加载图形或创建数据库之前应用程序启动。
  • 在加载完所有内容之前显示它。不要在固定的时间内显示它。
  • ...这是 OP 实际要求的。
【解决方案4】:

社区接受的标准解决方案正在使用启动主题。

查看这篇文章:http://saulmm.github.io/avoding-android-cold-starts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2020-06-15
    相关资源
    最近更新 更多