在收集应用程序内存后重新启动时启动画面不会重新启动
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();
}
所以一般来说,启动画面活动的常见方法是这样的:
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();
}