如何在 SplashActivity 完成之前让 MainActivity 准备好?
How to make MainActivity ready before SplashActivity 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" />
您可以使用 https://developer.android.com/reference/android/os/AsyncTask.html 来完成。
在启动画面直到 5 秒时进行逻辑处理,在 4 秒或以下时进行调用主 activity.
也许重点是他想延迟启动画面
如果是,那么您可以使用 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"
更改时间
首先,我要感谢所有回答我以及对我的问题发表评论的人。 @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));
谢谢大家!
我想让启动画面更流畅。阅读这篇文章后,我制作了闪屏 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" />
您可以使用 https://developer.android.com/reference/android/os/AsyncTask.html 来完成。 在启动画面直到 5 秒时进行逻辑处理,在 4 秒或以下时进行调用主 activity.
也许重点是他想延迟启动画面
如果是,那么您可以使用 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"
更改时间首先,我要感谢所有回答我以及对我的问题发表评论的人。 @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));
谢谢大家!