首页 > 解决方案 > 如何在 SplashActivity 完成之前使 MainActivity 准备好?

问题描述

我想让我的启动画面更流畅。阅读此链接后,我制作了启动画面。但是,当我完成 SplashActivity 并意图进入 MainActivity 时,我觉得 SplashActivity 完成得太早了,我在 MainActivity 显示之前看到了我的设备的屏幕保护程序(我估计延迟为 0.5s)。我想要的是在 SplashActivity 完成之前准备好 MainActivity。

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

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

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" />

标签: androidandroid-intentsplash-screenactivity-finish

解决方案


首先,我要感谢所有回答我以及评论我的问题的人。@MOF有一个答案(答案链接),它并没有解决问题,但它帮助我想到了一种新的方式,而这种新的方式让我的问题不再存在。我的方法是:

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));

谢谢大家!


推荐阅读