Жизненный цикл Android: заполнить данные в деятельности в onStart () или onResume ()? - PullRequest
7 голосов
/ 09 января 2011

Если вы получаете данные с помощью курсора и вводите данные на экране, например, задаете заголовок окна, в onStart() или onResume()?

onStart()Казалось бы, логичное место, потому что после onStart() активность может уже отображаться , хотя и в фоновом режиме.В частности, у меня была проблема с управляемым диалогом , который заставил меня переосмыслить это.Если пользователь поворачивает экран, когда диалоговое окно все еще открыто, onCreateDialog() и onPrepareDialog() называются между onStart() и onResume().Если диалог должен основываться на данных, вам нужно, чтобы данные были до onResume().

Если я прав насчет onStart(), то почему пример Notepad даетплохой пример, делая это в onResume()?См. http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html NoteEditor.java строка 176 (title = mCursor.getString...).

Кроме того, что если моя активность запустит другой Actvity / Dialog, который изменяет данные, отслеживаемые моим курсором.Даже в простейшем случае это означает, что мне нужно обновить вручную мой предыдущий экран (прослушиватель для диалога в основной деятельности), или, в качестве альтернативы, я должен зарегистрировать ContentObserver, так как ябольше не обновлять данные в onResume () (хотя я мог бы обновить их дважды, конечно)?

Я знаю, что это основной вопрос, но диалог, к моему удивлению, только недавно заставил меня осознать это.

Ответы [ 2 ]

3 голосов
/ 09 января 2011

Опять же решение зависит от того, что вас устраивает.

Если вы хотите, чтобы курсор был предварительно заполнен один раз для каждого приложения (и не беспокоиться о каких-либо изменениях, вы можете сделать это в onCreate (). Этот метод будет вызываться только в том случае, если процесс приложения будет убит иприложение перезапускается.

Если вы хотите, чтобы курсор заполнялся каждый раз, когда начинается видимое время жизни (в большинстве случаев служба / трансляция вызывает вашу активность, вам следует использовать onStart ()

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

Надеюсь, это проясняет

2 голосов
/ 09 января 2011

Чтобы ответить на ваш вопрос о NoteEditor, просто взгляните на строки над той, которую вы цитируете, и вы увидите ...

    // Requery in case something changed while paused (such as the title)
    mCursor.requery();

Комментарий, кажется, объясняет все это.Хотя я сам не пробовал пример NotePad, похоже, что автор (ы) строят способность восстанавливаться после изменений, пока NoteEditor приостановлен (и затем возобновлен).

Как поясняет GSreeЯ набрал это), нет правильного или неправильного ответа, и это просто зависит от того, что нужно сделать в какой-то момент жизненного цикла действия.

...