在收集应用程序内存后重新启动时,启动屏幕不会重新启动

时间:2015-09-16 20:38:40

标签: android splash-screen android-lifecycle application-lifecycle

因此,一般来说,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”,但这似乎没有做任何事情。

1 个答案:

答案 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();
}