Android Oreo (8.0) на задней панели отображает заставку

Я наблюдал такое странное поведение на устройствах Android 8.0.

Во время обеда приложения отображается экран-заставка, как и ожидалось, и выполняется переход к следующему действию (MainActivity). Если я нажму кнопку «Назад» в MainActivity, он снова покажет экран-заставку и сам вернется в MainActivity.

Это происходит только в устройствах Android 8.0, проверенных в Samsung S7 и Nexus 5X. Где, как это работало без проблем в Android 5.0 (Samsung J7).

Здесь я добавил NoHistory = true в свою активность всплеска, а также в тему всплеска. Код экрана-заставки, аналогичный приведенному здесь: xamarin android брызги

Что я пробовал:

  • Добавление свойства oreo (стиль V26) android: windowSplashscreenContent вместо android: windowBackground в тему. пример ссылки
  • Добавление finish () в экран-заставку после навигации работает, но показывает некоторый эффект сбоя, кроме того, я хочу знать причину вышеуказанного поведения.

Благодарим за любые подсказки / основную причину этой проблемы. Спасибо

Изменить: всплеск кода:

[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
{
    public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
    {
        base.OnCreate(savedInstanceState, persistentState);
    }

    // Launches the startup task
    protected override void OnResume()
    {
        base.OnResume();
        Task startupWork = new Task(SimulateStartup);
        startupWork.Start();
    }

    // Simulates background work that happens behind the splash screen
    private async void SimulateStartup()
    {
        await Task.Delay(1000); // Simulate a bit of startup work. 
        StartActivity(new Intent(Application.Context, typeof(MainActivity)));
        //Finish();
    }
    public override void OnBackPressed()
    {

    }
}

Тема:

  <style name="InspectTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar"> 
<!--<item name="android:windowSplashscreenContent">@mipmap/ic_splash</item>-->
<item name="android:windowBackground">@mipmap/ic_splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:noHistory">true</item>
<item name="android:windowFullscreen">true</item>

Added device screen recording here

Образец кода загружен здесь


person Suchith    schedule 14.05.2019    source источник
comment
Прежде всего, вы можете переопределить метод OnBackPressed в MainActivity, запретить кнопку возврата, как этот код public override void OnBackPressed() { }, если он все еще не работает, не могли бы вы предоставить демонстрацию своего экрана-заставки? Я тестирую docs.microsoft.com/en-us/ xamarin / android / user-interface / ссылка, я не могу воспроизвести эту проблему, она работает нормально в Nexus 5X   -  person Leon Lu - MSFT    schedule 15.05.2019
comment
@ LeonLu-MSFT ожидаемое поведение при нажатии кнопки возврата - это перемещение приложения в фоновый режим, как обычно, поэтому не могу его отключить. добавлен фрагмент кода заставки. Позвольте мне знать, если вам нужно что-нибудь еще.   -  person Suchith    schedule 15.05.2019
comment
@ LeonLu-MSFT обновил ссылку на образец кода   -  person Suchith    schedule 15.05.2019


Ответы (1)


Я тестирую ваш код на своем устройстве, эта проблема связана с

<item name="android:windowIsTranslucent">true</item> в InspectTheme файле styles.xml.

Если я удалю эту строку, этот GIF будет запущен.

введите здесь описание изображения

Теперь есть styles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="InspectTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item> 
<item name="android:windowContentOverlay">@null</item>

<item name="android:textAllCaps">false</item> 
 </style>


 <style name="InspectTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar"> 
<!--<item name="android:windowSplashscreenContent">@mipmap/ic_splash</item>-->
<item name="android:windowBackground">@mipmap/ic_splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:noHistory">true</item>
<item name="android:windowFullscreen">true</item>
    </style>
</resources> 
person Leon Lu - MSFT    schedule 16.05.2019