如何在SplashActivity完成之前准备MainActivity?

时间:2019-02-27 03:45:20

标签: android android-intent splash-screen activity-finish

我想让我的启动画面更流畅。阅读此link之后,我创建了启动屏幕。但是,当我完成SplashActivity并打算使用MainActivity时,我觉得SplashActivity还为时过早,因此在MainActivity显示之前,我看到了设备的屏幕保护程序(我估计延迟为0.5秒)。我想要的是在SplashActivity完成之前准备好MainActivity。

我尝试了在Intent中设置了标志FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK的解决方案,但这并不顺利。

下面是两个活动之间的转换代码:

private void transitionActivity() {
        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
    }

清单文件:

<activity
            android:name=".SplashActivity"
            android:launchMode="singleTask"
            android:theme="@style/SplashScreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity
            android:name=".MainActivity"
            android:launchMode="singleTask"
            android:theme="@style/AppThemeNoActionBar" />

3 个答案:

答案 0 :(得分:0)

您可以使用https://developer.android.com/reference/android/os/AsyncTask.html来做到这一点。 闪屏直到5秒钟时保持逻辑,4秒钟或以下时保持响应以调用您的主要活动。

答案 1 :(得分:0)

也许关键是他想延迟启动画面

如果这样,您可以使用Handler()来做到这一点

int SplashDuration = 2000;
new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Intent i = new Intent(splashScreen.this, MainActivity.class);
                    startActivity(i);
                    finish();
                }

            }, SplashDuration);

如果仍然对您来说快还是慢,您可以在“ SplashDuration”处更改时间

答案 2 :(得分:0)

首先,我要感谢回答我并评论我问题的每个人。 @MOF(answer link)有一个答案,它不能解决问题,但是可以帮助我想到一种新的方式,并且这种新方式可以帮助我的问题不再存在。我的方式是:

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        startActivity(intent);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                finish();
            }
        }, getResources().getInteger(android.R.integer.config_mediumAnimTime));

谢谢大家!