- Пользователь открывает ActivityA с идентификатором 1, затем открывает ActivityB оттуда. Итак,
стек будет таким: ActivityA(id: 1) → ActivityB - Затем из ActivityB пользователь открывает ту же операцию ActivityA с идентификатором 1 и стек будет выглядеть так: ActivityA(id: 1). Обратите внимание, что ActivityB был просто
вытащен из стека.
- Пользователь открывает ActivityA с идентификатором 1, затем оттуда открывает ActivityB. Стек теперь будет таким: ActivityA(id: 1) → ActivityB
- Теперь из ActivityB пользователь открывает ActivityA с идентификатором 2, и
стек должен быть например: ActivityA(id: 1) → ActivityB → ActivityA(id: 2). Обратите внимание, что вместо того, чтобы вытаскивать ActivityB, он остается в стеке и добавляет еще один экземпляр ActivityA, но теперь с другим идентификатором.
PS: ActivityB открывает ActivityA через глубокую ссылку.
Попытки
Я мог бы добиться аналогичного поведения, используя
Код: Выделить всё
android:documentLaunchMode="intoExisting"
android:launchMode="singleTask"
Использование TaskAffinity будет также создаю новую задачу, но я не могу себе этого позволить.
Обновить
Моя текущая попытка:
AndroidManifest
Код: Выделить всё
Код: Выделить всё
private val idsInStack = mutableSetOf()
class ActivityA : AppCompatActivity(R.layout.activity_a) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val id = intent.data?.getQueryParameter("QUERY_ID")
if (idsInStack.contains(id)) {
val intent = Intent(this, ActivityA::class.java)
intent.data = this.intent.data
intent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP or
Intent.FLAG_ACTIVITY_SINGLE_TOP or
Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP
)
startActivity(intent)
finish()
}
id?.let { idsInStack.add(it) }
diInjection()
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ynamic-ids
Мобильная версия