Экран-заставка не перезапускается при перезапуске после сбора памяти приложения

Таким образом, общий подход к действиям на экране-заставке выглядит примерно так:

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

Проблема, которую я обнаружил для этого случая, заключается в том, что когда приложение находится в фоновом режиме и оно получает память, когда вы возвращаете его на передний план, снова вызывается Application.onCreate, действие Splash не вызывается, а вместо этого любое действие было открыто когда приложение перешло в фоновый режим, открывается. Как убедиться, что в этой ситуации запускается SplashScreen?

Edit1: Кстати, я попытался установить android:clearTaskOnLaunch="true" для активности экрана-заставки, но, похоже, это ничего не дало.


person Leo K    schedule 16.09.2015    source источник
comment
В манифесте зарегистрируйте свой собственный экземпляр приложения: ‹application android:name=fullinstanceclass ...› при создании экземпляра вашего приложения запустите заставку?   -  person d3n13d1    schedule 16.09.2015
comment
@ d3n13d1, но как это отразится на активности MAIN/LAUNCHER... в настоящее время я помечаю активность SplashScreen как таковую.   -  person Leo K    schedule 17.09.2015


Ответы (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();
}
person Leo K    schedule 17.09.2015