Метод действия 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. Однако это рекомендуемое решение, так как оно не решает первопричину проблемы.