2013-03-21 3 views
3

У меня есть два вида деятельности: ActivityA и ActivityB. ActivityA запускает Activity B для результата и ожидает определенный resultCode. Если это не получается, ActivityA завершается. Идея заключается в том, что это закрывает приложение.Android onActivityResult и onResume Lifecycle после небольшой очистки памяти

ActivityA также имеет метод onResume, который делает некоторые вещи. Я не хочу, чтобы это было сделано, если ActivityA решает закончить метод onActivityResult.

Это работает в большинстве случаев, за исключением ситуаций с низкой памятью, когда андроид удаляет ActivityA и ActivityB из памяти и перезагружает их.

Например: ActivityA начинает ActivityB. Обоснование приложения. Тогда андроид все-таки очищает память. Мы можем имитировать это в DDMS.

  • Принесите приложение на передний план.
  • OnCreate() призвал ActivityB
  • Кнопка назад закончить ActivityB
  • OnCreate() призвал ActivityA
  • onActivityResult() призвал ActivityA
  • результат является отмена, вызов послевкусие()
  • onResume() призвал ActivityA
  • на резюме делает вещи

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

  • Принесите приложение на передний план
  • кнопку Назад, чтобы закончить ActivityB
  • onActivityResult() призвал ActivityA
  • результат является отмена, вызов отделка()

Я видел это как на телефоне, работающем в прянике, так и на бегущей железе Nexus 7.

Мой первый вопрос: не хватает ли я чего-то очевидного в жизненном цикле активности?

В противном случае это ожидаемое поведение от Android? Есть ли элегантный способ разрешить это, или мне нужно что-то взломать, или я должен попробовать другой подход?

Заранее спасибо. Если кому-то нужна дополнительная информация или код, просто дайте мне знать.

ответ

1

Вы можете объявить класс private boolean mShouldFinished. Установите его на true в onActivityResult при вызове finish. В onResume отметьте mShouldFinished и если true позвонить finish.

+4

То, что я сделал. Кроме того, я назвал переменную ohGodWhy. Я надеялся, что есть лучшее решение:/ – jacobhyphenated

+0

Вы можете переопределить onLowMemory в B и называть его завершением. –

+0

Я не думаю, что это проблема. Кажется, что B заканчивается правильно и возвращает правильный код результата A. Это A, у которого проблемы.Кроме того, я не хочу всегда заканчивать(), если есть небольшая память. В идеале пользователь может вернуться к B и выполнить Activity, и не было бы необходимости называть finish() для любого из них. – jacobhyphenated