在收集应用程序内存后重新启动时启动画面不会重新启动

Splash screen not relaunching when relaunching after Application memory collected

所以一般来说,启动画面活动的常见方法是这样的:

public class SplashActivity extends Activity
    @override
    protected void onResume() {
    //Create a thread
     new Thread(new Runnable() {
            public void run() {
                //Do heavy work in background
                ((MyApplication)getApplication()).loadFromDb();
                startActivity(new Intent(SplashActivity.this,     MainActivity.class));
                finish(); //End this activity
            }
        }).start();
    }
}

我在这种情况下发现的问题是,当应用程序在后台并收集内存时,当您 return 它到前台 Application.onCreate 再次调用时,Splash activity 没有被调用,而是当应用程序进入后台时打开的任何 activity 被打开。您如何确保在这种情况下启动的是 SplashScreen?

Edit1:顺便说一句,我试过为初始屏幕 Activity 设置 android:clearTaskOnLaunch="true",但这似乎没有任何作用。

所以我找到了一个有效的解决方案:

扩展 Application class,添加一个布尔字段 isSplashInitialized 并在应用程序的 onStart 中将其设置为 false。然后在您的 Splash Activity 中完成初始化后,在调用 finish() 之前,将应用程序的 isSplashInitialized 字段设置为 true。 然后有一个 BaseActivity class 你所有的 Activity 都会扩展。在其中扩展 onCreate() 并在调用 super.onCreate(); 后执行以下操作:

if (!(this instanceof SplashActivity) && !MyApplication.getIntance().isSplashInitialized()) {
    Intent intent = new Intent(this, SplashActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();
}