Android 如何在活动结束前准备好主要活动?

Android 如何在活动结束前准备好主要活动?,android,android-intent,splash-screen,activity-finish,Android,Android Intent,Splash Screen,Activity Finish,我想让我的启动画面更平滑。我读了这篇文章后做了一个闪屏。但是,当我完成SplashActivity并打算进行MainActivity时,我觉得SplashActivity完成得太早了,我在MainActivity显示之前看到了设备的屏幕保护程序(我估计延迟为0.5s)。我想要的是在Splash活动结束之前准备好主活动 我尝试了在我的意图中设置flags\u ACTIVITY\u NEW\u TASK和FLAG\u ACTIVITY\u CLEAR\u TASK的解决方案,但并不能使其顺利进行 以

我想让我的启动画面更平滑。我读了这篇文章后做了一个闪屏。但是,当我完成SplashActivity并打算进行MainActivity时,我觉得SplashActivity完成得太早了,我在MainActivity显示之前看到了设备的屏幕保护程序(我估计延迟为0.5s)。我想要的是在Splash活动结束之前准备好主活动

我尝试了在我的意图中设置flags\u ACTIVITY\u NEW\u TASK和FLAG\u ACTIVITY\u CLEAR\u 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" />

你可以用它来做。 当splashscreen持续5秒时进行逻辑设置,当4秒或以下时进行逻辑设置以调用您的主要活动。

您可以使用它来完成此操作。
在启动屏幕时,将逻辑设置为5秒,在启动屏幕时设置为4秒或以下,以调用您的主要活动。

也许关键是他想在启动屏幕时给予延迟

如果是这样的话,您可以使用Handler()实现


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

也许关键是他想在启动屏幕上延迟

如果是这样的话,您可以使用Handler()实现


如果对你来说还是快还是慢,你可以在“SplashDuration”更改时间。首先,我要感谢所有回答我并对我的问题发表评论的人。有一个@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));

谢谢大家

首先,我要感谢所有回答我的问题并对我的问题发表评论的人。有一个@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));

谢谢大家

准备好MainActivity是什么意思?如果您在主活动中加载信息,则必须将其加载到splash中,并且在获得信息后,主活动可以加载该信息。或者,如果需要,您可以使用加载对话框加载链接数据。@KiranMalvi我希望MainActivity的内容视图准备就绪;因为我想在完成SplashActivity时,看到的是MainActivity,而不是设备的屏幕保护程序(可能是因为完成太早)。MainActivity的内容视图是一个登录表单。@GilbertoIbarra MainActivity是一个登录表单,所以我不加载任何东西,我只想在完成SplashActivity后,看到MainActivity而不是设备的屏幕保护程序。我知道我看到屏幕保护程序的原因,这是因为完成SplashActivity太早了。如果你不加载任何内容,问题可能是其他的,也许你的xml中有一个很大的位图,另一方面,也许你只有一个较慢的手机,idk。准备好MainActivity是什么意思?如果你在主要活动中加载信息,它必须加载到splash中,获得它后,主活动可以加载该信息。或者,如果需要,您可以使用加载对话框加载链接数据。@KiranMalvi我希望MainActivity的内容视图准备就绪;因为我想在完成SplashActivity时,看到的是MainActivity,而不是设备的屏幕保护程序(可能是因为完成太早)。MainActivity的内容视图是一个登录表单。@GilbertoIbarra MainActivity是一个登录表单,所以我不加载任何东西,我只想在完成SplashActivity后,看到MainActivity而不是设备的屏幕保护程序。我知道我看到屏幕保护程序的原因,这是因为完成SplashActivity太早了。如果你不加载任何内容,问题可能是其他的,也许你的xml中有一个大位图,另一方面,也许你只有一个较慢的手机idk。你的意思是我应该在SplashActivity中有一个AsyncTask,它会运行到5秒。4秒钟后,我运行代码startActivity(intent)?我尝试过,没有任何更改。不过,我想对你说声谢谢,谢谢你的回答。你的意思是我应该在SplashActivity中有一个AsyncTask,它会一直运行到5秒。4秒钟后,我运行代码startActivity(intent)?我尝试过,没有任何更改。然而,我想对你说声谢谢,谢谢你的回答。你的解决方案并不能解决我的问题,但它帮助我想办法解决我的问题。在Runnable中的“run”函数中,我保留了“finish()”,并将其余部分从Runnable中去掉。类型为:起始触觉(意向);新处理程序()。延迟后(…);那么,现在,你能更新你的答案让我投你一票吗?你的解决方案并不能解决我的问题,但它能帮助我想出解决问题的办法。在Runnable中的“run”函数中,我保留了“finish()”,并将其余部分从Runnable中去掉。类型为:起始触觉(意向);新处理程序()。延迟后(…);那么,现在,你能更新你的答案让我投你一票吗?