Как предотвратить перезапуск приложения при использовании пусковой установки после магазина?

Мое приложение для Android перезапускается при использовании запуска, чтобы запустить его после того, как я использовал магазин приложений для его запуска (и наоборот). Есть ли способ предотвратить это?

При перезапуске я хочу сказать, что стек активности потерян. Это важно, так как наши пользователи периодически настраиваются и возвращаются к активности в приложении в течение часа или около того. После первой установки они, скорее всего, установили и открыли приложение из магазина приложений, настроились, а затем основали приложение. Позже они, скорее всего, откроют приложение из пусковой установки и потеряют все свое состояние!

Проблема еще более усугубляется тем, что мы начинаем работу переднего плана вместе с настройкой. Нажатие на уведомление об услугах должно вернуть пользователя к настройке, но, как и при запуске, если пользователь изначально открыл приложение из магазина Play, они снова потеряли все свое состояние!

Воспроизведение проблемы

Я сделал пример приложения здесь:

https://github.com/samskiter/LaunchTest

Примечание. Он использует идентификатор пакета приложений погоды BBC, чтобы вы могли быстро открыть его из магазина приложений (кнопка "Открыть" будет отображаться в приложении погоды BBC, если это приложение установлено).

Шаги выглядят следующим образом:

  • Удалите приложение погоды BBC, если оно есть
  • Установите приложение LaunchTest
  • Закройте приложение LaunchTest из откликов
  • Откройте приложение LaunchTest со страницы приложения погоды BBC в Play Маркете
  • Нажмите кнопку, чтобы перейти к операции Вторая.
  • Фон приложения (нажмите на дом)
  • Откройте приложение LaunchTest из панели запуска приложений
  • Государство потеряно! вы вернулись к Первому (корневому) действию

Что я пробовал

Использование режима запуска singleTask не помогло - это приводит к перезагрузке приложения, даже если вы используете панель запуска каждый раз.

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

Я думаю, что происходит

В системе управления/намерениями активности нет механизма для открытия текущего приложения в текущем состоянии. Вместо этого я считаю, что UID запускающего приложения учитывается. Если он отличается, то флаг Intent.FLAG_ACTIVITY_NEW_TASK принудительно и создает новую задачу, а также отменяет прекрасное состояние всех моих пользователей.

Проверка Карт Google

Карты Google имеют очень похожую модель взаимодействия с нашим приложением: пользовательский интерфейс настройки, за которым следует непрерывный процесс, который пользователь проходит в течение длительного периода времени (навигация) с помощью спаренного, переднего плана (служба навигации, которую вы можете см. в панели уведомлений). НО GMaps не страдает от этой проблемы. Я думаю, это потому, что он использует только одно действие для всего интерфейса и использует singleTask. Итак, теперь, когда вы нажимаете на пусковую установку после первоначального запуска из магазина воспроизведения, задача может быть повторно использована.

По-моему, это открывает дыру в системе управления намерениями/действиями android. Вся цель жизненного цикла savedInstanceState/activity - предотвратить состояние сброса, но здесь у нас есть способ сбрасывать все. Мое самое лучшее решение заключается в том, чтобы обнаруживать перезагрузки приложений из-за того, что служба работает, и попытаться вернуть пользователя туда, где они были, что более чем сложно.

Если кто-то знает способ, я могу предотвратить падение моего состояния на полу при повторном открытии с панели запуска приложений после открытия из магазина, я был бы очень признателен.

1 ответ

Это больше похоже на обходной путь к вашей проблеме, но, похоже, не может быть реального решения.

Моя первая мысль заключалась в том, что, поскольку вся установка займет какое-то время, почему бы вам просто не сохранить какую-либо закладку ('firstLaunch') в настройках, опубликовать уведомление (отложенное?) и завершить приложение, поэтому что пользователь должен открыть его снова, нажав на значок запуска. Только после этого вы начнете реальную настройку, чтобы не потерять информацию из-за проблемы с установщиком и запусками.

Но проблема, кажется, была в течение некоторого времени, и следующие SO-сообщения могут помочь:

Повторный запуск кнопки "Активность на дому" , но... только в первый раз

После нажатия на значок приложения запускайте новый экземпляр корневой активности снова и снова

Надеюсь, это поможет!

licensed under cc by-sa 3.0 with attribution.