2010-02-17 1 views
0

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

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

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

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

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

Так что я попытался это:

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

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

Благодаря

ответ

0

Вы можете установить режим запуска активности в SingleTop для достижения этой цели.

android: launchMode Инструкция о том, как должна быть запущена деятельность. Существует четыре режима, которые работают вместе с флажками активности (константы FLAG_ACTIVITY_ *) в объектах Intent, чтобы определить, что должно произойти, когда действие призвано обрабатывать намерение. Это: «стандарт» «singleTop» «singleTask» «singleInstance» Режим по умолчанию «стандартный».

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

+0

Привет sadboy, я поставил launchMode в SingleTop, но до сих пор никакого эффекта. Я могу напечатать адрес mem-активности и увидеть, что каждый раз, когда браузер запускает новый экземпляр, это другой mem-адрес вместо того, чтобы просто возобновлять уже запущенный экземпляр. – user246114

+0

Thats weird. Вы помещаете его в манифест приложения, в котором вы заявляете о своей деятельности? И я предполагаю, что вы пробовали другие режимы запуска, такие как singleinstance? –

Смежные вопросы