Где я должен использовать getIntent () в жизненном цикле Android - PullRequest
0 голосов
/ 22 ноября 2018

В моем приложении есть ошибка, которую я думал, что знаю, как ее устранить, но теперь я больше думал о том, что происходит, но я не уверен, что знаю исправление.

Мое приложение получаетвходящее намерение от вызывающего стороннего приложения в виде строки.Эта строка может быть отправлена ​​как SEND намерение или VIEW намерение.

Все это прекрасно работает, если приложение уже не запущено ...

Вот что происходит:

  1. Мое приложение не запущено (не отображается в представлении запущенных приложений)
  2. Поделиться нажата в другом (стороннем) приложении, и мое приложение выбрано для получения общего текста (text1).
  3. Мое приложение открывается, и текст отображается (и обрабатывается), как и ожидалось.
  4. Пользователь переключается обратно на стороннее приложение и обменивается некоторым другим текстом (text2) и моим приложением.выбран для получения этого нового текста.
  5. Мое приложение открывается, но оригинальный текст (text1) по-прежнему отображается.

В этот момент я подумал, что ошибка связана с тем, что ячтение намерения в onCreate(), а затем его отображение и обработка.Я думал, что, поскольку приложение уже запущено, onCreate() не вызывается, когда приложение отображается во второй раз, когда мы переходим в жизненный цикл в onResume().

Однако, если я продолжу тестирование какследующим образом:

Не выходя из моего приложения, пользователь снова переключается на стороннее приложение и снова делится с моим приложением тем же фрагментом второго текста (text2). Мое приложение отображается снова, но на этот раз правильно отображается иобрабатывает второй текст.

Как это может быть, поскольку приложение все еще работает, конечно, onCreate() по-прежнему не будет вызываться!

Я думал, что исправление былобудет просто переместить getIntent() вызов в onResume() (или onStart()?), но теперь я не уверен в этом.Это правильно делать?

1 Ответ

0 голосов
/ 22 ноября 2018

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

Здесь будет иметь значение режим запуска.

Что вы можете сделать, это установить для launchMode значение singleTop, а затем получить намерение в методе onNewIntent () .

Это хороший способ справиться с такими сценариями.Пожалуйста, прочитайте ссылку выше, и она прояснит ситуацию.

...