Преодолеть барьер задачи - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть приложение для Android. Я добавил фильтр намерений в одно из своих занятий, чтобы при щелчке по URL-адресу в браузере приложение могло быть запущено. Выглядит так:

<data android:host="www.mysite.com" android:scheme="http"></data>

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

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

Идеальным решением для меня было бы, если бы я мог каким-то образом вывести уже существующий экземпляр моего приложения на передний план, а также запустить или возобновить целевую активность в пределах того, какой запущенный ранее экземпляр моего приложения работал. *

Итак, я попробовал это:

  1. Зарегистрируйтесь выше фильтра, чтобы указать на фиктивную активность, которая является просто ловцом.
  2. Фиктивная операция создает намерение широковещания и пытается передать в систему сообщение «создай меня».
  3. Реальная целевая активность настроена на прослушивание этого широковещательного сообщения. Надеемся, что если в системе уже есть экземпляр активности, он выйдет на первый план. Если экземпляра еще нет, все в порядке, разрешите создание в задаче браузера.

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

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2010

Для достижения этого можно установить режим запуска активности SingleTop.

андроид: launchMode Инструкция о том, как должна быть запущена активность. Есть четыре режима, которые работают вместе с флагами активности (константы FLAG_ACTIVITY_ *) в объектах Intent, чтобы определить, что должно произойти, когда действие вызывается для обработки намерения. Они есть: «Стандарт» "SingleTop" "SingleTask" "SingleInstance" Режим по умолчанию - «стандартный».

https://developer.android.com/guide/topics/manifest/activity-element.html#lmode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...