API заставки Android 12 — получение белого экрана после заставки на некоторых устройствах ниже Android 12

У меня есть специальное действие SplashScreen, и в этом действии есть один вызов API (один раз в жизни), инициализация SDK, установка значений по умолчанию для Firebase RemoteConfig и логика маршрутизации. На некоторых устройствах он работает нормально, как и ожидалось, но на некоторых устройствах я получаю белый экран после отображения SplashScreen.

Список устройств, на которых я тестировал его:

  1. Samsung s20 fe (Android 12) - работает как положено
  2. OnePlus (Android 11) — работает как положено
  3. MI (Android 11) - белый экран
  4. Moto G5 Plus (Android 8) - появляется белый экран

Примечание: Вышеупомянутая бизнес-логика не занимает много времени, чтобы получить процесс, пожалуйста, проверьте следующие журналы

2022-11-01 15:24:13.146  5905-5905  V  OnCreate
2022-11-01 15:24:13.177  5905-5905  V  SplashScreen.installSplashScreen
2022-11-01 15:24:13.275  5905-5905  V  setKeepOnScreenCondition
2022-11-01 15:24:13.282  5905-5905  V  onTaskComplete
2022-11-01 15:24:13.297  5905-5905  V  nextScreen
2022-11-01 15:24:13.315  5905-5905  V  User details is not null in SplashScreen
2022-11-01 15:24:18.716  5905-5905  V  onDestroy

Файл манифеста

   <activity
        android:name = ".splashscreen.SplashScreenActivity"
        android:exported = "true"
        android:label = "@string/app_name"
        android:theme = "@style/Theme.App.Starting">
        <intent-filter>
            <action android:name = "android.intent.action.MAIN" />
            <category android:name = "android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

значение/стили

<style name = "Theme.App.Starting" parent = "Theme.SplashScreen">
    <item name = "windowSplashScreenBackground">@color/white</item>
    <item name = "windowSplashScreenAnimatedIcon">@drawable/ic_impact</item>
    <item name = "windowSplashScreenAnimationDuration">500</item>
    <item name = "postSplashScreenTheme">@style/AppTheme</item>
</style>

значение/стили (v31)

<style name = "Theme.App.Starting" parent = "Theme.SplashScreen">
    <item name = "windowSplashScreenBackground">@color/white</item>
    <item name = "windowSplashScreenAnimatedIcon">@drawable/ic_impact_anim</item>
    <item name = "windowSplashScreenAnimationDuration">1000</item>
    <item name = "postSplashScreenTheme">@style/AppTheme</item>
</style>

SplashScreenActivity

    @Override
protected void onCreate(Bundle savedInstanceState) {
    SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
    super.onCreate(savedInstanceState);
    splashScreen.setKeepOnScreenCondition(() -> true);
    Utils.initThirdPartySdk();
    initiateRemoteConfig();
}

//at last calling nextScreen()
 private void nextScreen() {
        Timber.v("nextScreen");
        boolean userLogin = MainApplication.isUserLoggedIn();
        if (userLogin) {
            Timber.v("User details is not null in SplashScreen");
            showMainActivity();
        } else {
            Timber.w("User details is null in SplashScreen, opening LoginActivity");
            showLoginActivity();
        }
        finish();
    }

private void showMainActivity() {
    Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
}
1
2
399
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема была связана с переключением действий, поэтому удаление следующей строки кода для вызова MainActivity решит проблему.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

извините, не работает для меня

thecr0w 09.11.2022 14:52

Другие вопросы по теме