Метод действия onCreate всегда вызывается с помощью режима запуска "singleTask"

Я использую Branch IO в своем приложении и, согласно их документации, я использую android:launchMode="singleTask" для моей деятельности.

Вот фрагмент кода моего AndroidManifest.

        <activity
        android:name=".SplashScreen"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <data
                android:host="open"
                android:scheme="com.package.name" />

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

        <!-- Branch App Links (optional) -->
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="app.link"
                android:scheme="https" />
            <!-- <data android:scheme="https" android:host="example-alternate.app.link" /> -->
        </intent-filter>
    </activity>

Все работает нормально, за исключением того, что когда я нажимаю кнопку "Домой" во время использования приложения и нажимаю на иконку "App/Launcher", вызывается метод активности экрана Splash onCreate, который создает видимость запуска приложения с самого начала. Однако, если я нажимаю кнопку "Домой" во время использования приложения и открываю его из последних приложений, onCreate не вызывается, и все работает отлично.

Как настроить поведение приложения, если оно выводится на передний план из последних приложений и значка App/Launcher?

Я попытался удалить режим запуска singleTask, который делает запуск идеальным с помощью значка App/Launcher и недавних приложений, но при нажатии на ссылку IO филиала создается новый экземпляр приложения. Я могу понять, что для преодоления этой проблемы только они просят перевести singleTask в режим запуска.

Я проверял этот сценарий во многих приложениях, которые используют глубокие ссылки, и у них нет этой проблемы!

Должно быть, я делаю что-то не так, чего не вижу.

Что-то не хватает или реализация не так?

1 ответ

Решение этой проблемы переходит на архитектуру Single Activity. Поскольку всплывающее действие - это singleTask, метод onStart будет вызываться каждый раз, когда приложение выводится на передний план с помощью значка запуска. Нужно написать логику маршрутизации в методе onStart, когда отсюда запускается другое действие, состояние приложения теряется. Если есть одно действие, этой проблемы не будет. Однако придется иметь дело с неприятными фрагментами бэкстека. Не простой, но правильный подход.

Для быстрого решения этой проблемы можно использовать этот код в методе действий onCreate с режимом запуска в качестве singleTask.

        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
           return;
        }

Это может помочь избежать неестественного выполнения кода, написанного в onCreate. Однако это рекомендуемое решение, так как оно не решает первопричину проблемы.

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