Метод действия onCreate всегда вызывается с помощью режима запуска "singleTask" - PullRequest
0 голосов
/ 08 октября 2018

Я использую 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>

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

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

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

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

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

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

1 Ответ

0 голосов
/ 10 октября 2018

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

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

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

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

...