Как отобразить заставку при повторном запуске с последних после нажатия кнопки «назад» - PullRequest
0 голосов
/ 24 апреля 2019

Я реализовал заставку для моего приложения, потому что приложению требуется несколько секунд для загрузки данных.Заставка работает абсолютно нормально, когда я "начинаю с холода".Однако, когда я нажимаю кнопку «Назад» и перезапускаю приложение из списка последних, оно начинается с черного экрана вместо заставки (или иногда отображает список последних до тех пор, пока не будет выполнено основное действие).Как я могу получить заставку для отображения снова?

Моя MainActivity запускается из моей SplashActivity.Это поднимает экран со значком посередине, просто чтобы показать пользователю, что что-то происходит.Основная активность запускается как асинхронная задача.

Эти два действия находятся в файле AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Recorder.Recorder" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
  <uses-sdk android:minSdkVersion="22" android:targetSdkVersion="27" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <application android:label="Recorder"
               android:theme="@style/MyTheme.Splash"
               android:icon="@drawable/Icon">

    <!-- Parent activity -->
    <activity android:name=".MainActivity"/>

    <!-- A child of the main activity -->
    <activity
        android:name=".informationDisplayActivity"
        android:parentActivityName=".MainActivity" />
  </application>
</manifest>

Тема определена в файле styles.xml:

<style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

Я запускаю SplashActivity сследующие флаги:

[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
{}

И MainActivity следующим образом:

    [Activity(Label = "Recorder", Icon = "@drawable/Icon", MainLauncher = false )]
    public class MainActivity : AppCompatActivity, GestureDetector.IOnGestureListener
{}

My SplashActivity.OnCreate () вызывается, независимо от того, запускаю ли я «с холода» с домашнего экранаили из списка последних после нажатия кнопки назад.Однако я заметил, что при запуске приложения с главного домашнего экрана появляется заставка, прежде чем вызывается OnCreate (), поэтому он фактически показывает, что загружается действие.При перезапуске из списка последних, я хочу, чтобы он выглядел точно так же.Однако заставка снова не отображается.Вместо этого я получаю черный экран, или иногда отображается список последних, пока не появится MainActivity.

Я экспериментировал с различными флагами для своих действий (LaunchMode, ClearTaskOnLaunch), я пытался вызвать Finish () в onBackButtonPressed() чтобы убедиться, что мое основное задание выполнено правильно и по-настоящему очищено, я попытался вернуться к теме заставки, когда основное задание завершается, но безуспешно.Единственный обходной путь, который я нашел, - это вызов ExcludeFromRecents () в MainActivity.OnBackButtonPress ().Это вынуждает пользователя перезапускаться с начального экрана, чтобы он мог видеть заставку вместо (смущающего) пустого экрана.Однако это не совсем то, чего я хочу.Пользователь должен иметь возможность запустить приложение из списка последних.Если была нажата кнопка «Назад», то она не должна отличаться от запуска с начального экрана.

Я обнаружил множество вопросов о противоположной проблеме (заставка появляется, когда она не нужна).Я надеюсь, что кто-то может помочь с этим.

...