因此,一般来说,Splash Screen Activities的常用方法是这样的:
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();
}
}
我在这个案例中发现的问题是当应用程序在后台并且收集了memmory时,当你将它返回到前台时再次调用Application.onCreate时,Splash活动不会被调用,而是当应用程序进入后台打开时,活动已打开。在这种情况下,你如何确保SplashScreen是推出的?
Edit1:顺便说一句,我已经尝试为Splash Screen Activity设置android:clearTaskOnLaunch =“true”,但这似乎没有做任何事情。
答案 0 :(得分:1)
所以我找到了一个有效的解决方案:
扩展Application
类,添加一个布尔字段isSplashInitialized
并将其设置为应用程序false
中的onStart
。然后在完成初始化内容后,在你的Splash活动中,在调用finish()
之前,将应用程序的isSplashInitialized
字段设置为true
。
然后有一个BaseActivity
类,您的所有活动都会扩展。在其中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();
}