onCreate вызывается при возвращении из фона

В документации Android говорится, что в отношении метода onCreate:

Вызывается при первом создании действия. Здесь вы должны выполнить всю обычную статическую настройку: создать представления, привязать данные к спискам и т. д. Этот метод также предоставляет вам пакет, содержащий ранее замороженное состояние активности, если оно было. Всегда следует onStart().

Однако у меня странное поведение:

  • У меня есть действие A. Когда я запускаю свое приложение, вызывается onCreate. Это нормально.
  • Затем я нажимаю кнопку домой. onStop называется. Это нормально.
  • Я возвращаюсь к своему приложению, onCreate НЕ вызывается. Это нормально.
  • Я снова нажимаю домой.
  • Я перехожу в другое приложение (dropbox, gmail или что-то еще), чтобы получить доступ к файлу с расширением, которое связано с моим приложением (у меня есть фильтр намерений с pathPattern для этого расширения файла)
  • Я выбираю этот файл, чтобы открыть его в своем приложении. onCreate вызывается, хотя onDestroy никогда не вызывался. Это почему ? Если я установлю логическое значение в своей деятельности, чтобы проверить, первый ли раз я вызываю onCreate, это логическое значение дважды говорит true (в самый первый раз и во второй раз при открытии приложения с использованием расширения файла).

Наверное, я что-то неправильно понял с onCreate. Но док мне не помогает. Любая идея ?


person Vincent    schedule 04.06.2014    source источник


Ответы (2)


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

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

person Budius    schedule 04.06.2014
comment
Я только что проверил, но с помощью кнопки многозадачности я вижу только один экземпляр своего приложения. - person Vincent; 04.06.2014
comment
и logcat показывает один и тот же pid, поэтому кажется, что есть только один экземпляр. - person Vincent; 04.06.2014
comment
@Vincent Другой экземпляр действия, а не приложения. вы не увидите его в диспетчере задач. Используйте DDMS для проверки. - person Simon; 04.06.2014
comment
@ Саймон, да, ты прав. Используя этот метод (stackoverflow.com/a/10618496/575481), кажется, что у меня есть несколько экземпляров моей активности. Я думаю, что Dropbox начал новый. Как мне этого избежать!? - person Vincent; 04.06.2014
comment
счастлив знать, что я мог помочь. Вы, вероятно, можете избежать этого, используя некоторые флаги в манифесте, такие как singleInstance, сходство задач и т. д. Однажды я нашел этот замечательный PDF-файл (не спрашивайте меня, где, я погуглил или G+), и в нем есть действительно отличные советы относительно стека: drive.google.com/file/d/0B4UthPrlbfJPNG9PUGpWR1JyRDg/ - person Budius; 04.06.2014
comment
Спасибо за этот pdf, очень полезный. - person Vincent; 05.06.2014

Деятельность в этих двух случаях имеет разные цели. И при запуске из другого приложения вы фактически находитесь в другой задаче (обратный стек), активность по умолчанию android:launchMode является новым экземпляром для каждой задачи.

видеть

person Paul Verest    schedule 13.02.2015