Android Fragments onStart, кажется, запускает свой код до onCreateView

У меня есть фрагмент, который должен создавать какие-то файлы, перебирать контактную книгу и некоторые другие довольно длинные задачи. Фрагмент представляет собой довольно простой фрагмент «Эй, пожалуйста, подождите» с меткой и индикатором выполнения. Я использовал фабричный шаблон для передачи аргументов этому фрагменту.

Мой код фрагментов сопоставим с решением этот вопрос, только с другими параметрами и элементами. В методе onStart я хочу выполнять свои длительные задачи, но, как ни странно, он запускает код до того, как я увижу свое представление, которое должно быть сначала создано методом onCreateView, если я правильно помню жизненный цикл фрагмента.

Является ли это побочным эффектом Factory Pattern или чего мне здесь не хватает? Что было бы лучшим решением здесь, чтобы представление действительно отображалось до того, как он начнет выполнение моего длинного кода?


person Tristus    schedule 20.02.2015    source источник
comment
Приложение возвращается из фона? Тогда вы получаете только onStart() и никаких новых onCreateView()   -  person mach    schedule 20.02.2015
comment
нет, это происходит и тогда, когда его нет в фоновом режиме. Я также получаю представление в какой-то момент, но, похоже, оно начинается примерно через 1 секунду после onStart.   -  person Tristus    schedule 20.02.2015
comment
Запустите задачу в onCreate(). Не забудьте позвонить setRetainInstance(true). Тогда onCreate() будет вызываться только один раз, а onCreateView все равно будет вызываться по мере необходимости.   -  person Eugen Pechanec    schedule 20.02.2015


Ответы (2)


OnStart вызывается, когда действие становится видимым для пользователя. onCreateView создаст ваше представление, но оно еще не видно. Вы должны начать свою долгую операцию в onResume.

person Nauman Afzaal    schedule 20.02.2015

См. http://developer.android.com/reference/android/app/Activity.html#onResume()

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

onWindowFocusChanged(boolean hasFocus)

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

см. http://developer.android.com/reference/android/app/Activity.html#onWindowFocusChanged(boolean)

person harrane    schedule 20.02.2015