2011-04-01 4 views
8

Я закончил упражнение «Макет» и задаюсь вопросом, почему они включают звонок в populateFields() как в onCreate, так и в onResume.Android - Пример блокнота - Зачем заполнять inCreate?

В соответствии с Activity Lifecycle «onResume» всегда будет выполняться до того, как будет показана активность, так почему бы не просто туда?

ответ

3

У меня есть реальный код производства, который заполняет поля и вызывается только в onResume, и он работает нормально. Я думал, одна из причин будет то, что может быть onResume вызывается после того, как активность проявляется, но немного прибегая к помощи роет это (в основном несвязанный) нить: http://groups.google.com/group/android-developers/browse_thread/thread/ddea4830bedf8c6c?pli=1

Цитата: onResume(), таким образом, последнее, что происходит перед Пользовательский интерфейс показан

Это то, что говорит Дайан Hackborn, так что я думаю, что мы можем доверять ей :)

+0

В этом случае возникает другой вопрос: что мне делать в onCreate, помимо установки контекста? Должен ли я настраивать слушателей, или я могу просто подождать? – theblitz

+0

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

1

на самом деле я видел приложения (в моем приложении, а также другие), где поля были заселены только в onCreate(), но не в onResume().

Позволяет называть это приложение «A».

Эффект состоял в том, что когда пользователь нажал кнопку «домой», перешел в другое приложение, а затем вернулся к «A», экран остался черным, так как «A» все еще находился в памяти, и, таким образом, система не беспокоила позвонить по телефону onCreate(), но напрямую отправился в onResume().

Так что в основном я бы сказал (и на этот раз то, что написал @Torp) заполнил пользовательский интерфейс в onResume() и будет выполнен.

Но тогда этот ответ немного не по теме, поскольку он не отвечает на ваш вопрос «почему».

0

Вы не заполняете onResume, потому что он будет вызываться каждый раз, когда отображается действие.

Как правило, вы хотите создать как можно меньше объектов, чтобы создавать их раз и навсегда в onCreate, а затем вы всегда можете проверить, что они все еще обновляются в onResume.

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