Разница между onStart() и onResume()



Я не могу понять значение onStart() переходное состояние. Элемент onResume() метод всегда вызывается после onStart(). Почему это не может быть onResume() вызывается после onRestart() и onCreate() методы просто кроме onStart()? Какова его цель?



почему мы не можем жить без onStart(). Я все еще считаю его избыточным (вероятно, потому, что не понимаю его смысла полностью).

456   11  

11 ответов:

почему это не может быть onResume() вызывается после onrestart() и onCreate() методы просто исключая onStart()? Какова его цель?

хорошо, поскольку мой первый ответ был довольно длинным, я не буду продлевать его дальше, поэтому давайте попробуем это...

public DriveToWorkActivity extends Activity
    implements onReachedGroceryStoreListener {
}

public GroceryStoreActivity extends Activity {}

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: я намеренно пропустил призывы к таким вещам, как super.onCreate(...) etc. Это псевдокод, так что дайте мне художественную лицензию здесь. ;)

методы DriveToWorkActivity следовать...

protected void onCreate(...) {
    openGarageDoor();
    unlockCarAndGetIn();
    closeCarDoorAndPutOnSeatBelt();
    putKeyInIgnition();
}

protected void onStart() {
    startEngine();
    changeRadioStation();
    switchOnLightsIfNeeded();
    switchOnWipersIfNeeded();
}

protected void onResume() {
    applyFootbrake();
    releaseHandbrake();
    putCarInGear();
    drive();
}

protected void onPause() {
    putCarInNeutral();
    applyHandbrake();
}

protected void onStop() {
    switchEveryThingOff();
    turnOffEngine();
    removeSeatBeltAndGetOutOfCar();
    lockCar();
}

protected void onDestroy() {
    enterOfficeBuilding();
}

protected void onReachedGroceryStore(...) {
    Intent i = new Intent(ACTION_GET_GROCERIES, ...,  this, GroceryStoreActivity.class);
}

protected void onRestart() {
    unlockCarAndGetIn();
    closeDoorAndPutOnSeatBelt();
    putKeyInIgnition();
}

хорошо, так что это еще один длинный (извините люди). Но вот мое объяснение...

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

цикл от остановки обратно через a перезапуск (подготовка к продолжению моего путешествия), чтобы начать снова, возможно, менее распространен. В одном случае я замечаю продуктовый магазин и GroceryStoreActivity запускается (заставляя меня DriveToWorkActivity до onStop()). Когда я возвращаюсь из магазина, я иду через onRestart() и onStart() затем продолжить свое путешествие.

я мог бы поставить код в onStart() на onCreate() и onRestart() и не утруждайте себя переопределением onStart() вообще, но тем больше, что нужно сделать между onCreate() -> onResume() и onRestart() -> onResume(), чем больше я копирую вещи.

Итак, чтобы повторить еще раз...

почему это не может быть onResume() вызывается после onrestart() и onCreate() методы просто исключая onStart()?

если вы не переопределить onStart() тогда это действительно то, что происходит. Хотя чем onStart() метод Activity будет вызываться неявно, эффект в коде фактически onCreate() -> onResume() или onRestart() -> onResume().

короткий ответ:

мы не можем жить без onStart, потому что это состояние, когда активность становится "видимой" для пользователя, но пользователь не может "взаимодействовать" с ним, но может быть причиной его перекрытия с каким-то другим небольшим диалогом. Эта способность взаимодействовать с пользователем является той, которая отличает onStart и onResume. Думайте об этом как о человеке за стеклянной дверью. Вы можете видеть человека, но вы не можете взаимодействовать (говорить/слушать/пожать руку) с ним. OnResume - это как открыватель двери после чего можно приступать к взаимодействию.

кроме того, onRestart () является наименее понятным. Мы можем задать вопрос, почему бы сразу не перейти к onStart() или onResume() после onStop() вместо onRestart(). Это становится легче понять, если мы заметим, что onRestart() частично эквивалентен onCreate (), если часть создания опущена. В основном оба состояния приводят к onStart () (т. е. активность становится видимой). Таким образом, оба государства должны "подготовить" материал, чтобы быть отображается. OnCreate несет дополнительную ответственность за "создание" материала, который будет отображаться

поэтому их структуры кода могут соответствовать чему-то вроде:

onCreate()
{
     createNecessaryObjects();

     prepareObjectsForDisplay();
}


onRestart()
{
     prepareObjectsForDisplay();

}

вся путаница вызвана тем, что Google выбрал неинтуитивные имена вместо чего-то следующего:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

диаграмма активности может быть интерпретирована как:

Android Activity Lifecycle

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

посмотреть этой ссылке для справки.

onResume() называется:

  1. после onStart()
  2. когда Activity выходит на первый план.

от http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle: alt text

книга "Привет, Android, представляя платформу мобильной разработки Google" дает хорошее объяснение жизненного цикла android-приложений. К счастью, у них есть конкретная глава онлайн в качестве отрывка. См. рисунок на стр. 39 внутри http://media.pragprog.com/titles/eband3/concepts.pdf

кстати, эта книга очень рекомендуется для начинающих android!

особенно злой пример, когда вы решили показать управляемый диалог из действия с помощью showDialog(). Если пользователь поворачивает экран, пока диалоговое окно все еще открыто (мы называем это "изменение конфигурации"), то основное действие будет проходить через все вызовы конечного жизненного цикла до onDestroy(), будет воссоздан, и вернуться через жизненные циклы. Что вы не могли бы ожидать, однако, заключается в том, что onCreateDialog() и onPrepareDialog() (методы, которые вызываются, когда вы делаете showDialog() а теперь еще раз автоматически воссоздать диалог - автоматически, так как это управляемый диалог) называются междуonStart() и onResume(). Суть здесь в том, что диалог не охватывает весь экран и поэтому оставляет часть основной деятельности видимой. Это деталь, но это имеет значение!

onStart()

  1. вызывается после onCreate (Bundle) или после onRestart (), за которым следует onResume().
  2. вы можете зарегистрировать BroadcastReceiver в onStart() следить за изменениями это влияет на ваш пользовательский интерфейс, вы должны отменить его регистрацию в onStop ()
  3. производные классы должны вызывать суперкласс реализация данного способа. Если они этого не сделают, будет сделано исключение быть заброшенный.

onResume()

  1. вызывается после onRestoreInstanceState (Bundle), onRestart () или onPause ()
  2. начните анимацию, откройте устройства эксклюзивного доступа (например, камеру)

onStart() обычно отправка работы в фоновый поток, возвращаемые значения которого:

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

  • START_REDELIVER_INTENT для автоматического перезапуска и повторите попытку, если служба была убита до stopSelf().

onResume() вызывается ОС после того, как устройство переходит в спящий режим или после предупреждения или другой дочерней активности с частичным экраном оставляет часть предыдущего окна видимой, поэтому метод должен повторно инициализировать поля (в структуре try с уловкой исключений). Такая ситуация не вызывает onStop() вызывается, когда ребенок закрывается.

onResume() без onStart() когда активность возобновляется из фона

для получения более подробной информации вы можете посетить Android_activity_lifecycle_gotcha и Жизненный Цикл Активности

onStart() означает Activity введено в видимое состояние и макет создан, но не может взаимодействовать с этим макетом активности.

Resume() означает, что теперь вы можете выполнять взаимодействие с макетом активности.

обратите внимание, что есть вещи, которые происходят между вызовами onStart() и onResume(). А именно, onNewIntent(), который я мучительно узнал.

Если вы используете флаг SINGLE_TOP, и вы отправляете некоторые данные в свою деятельность, используя intent extras, вы сможете получить к нему доступ только в onNewIntent (), который называется после методы onStart() и до onResume(). Поэтому обычно вы берете новые (возможно, только измененные) данные из дополнений и устанавливаете их для некоторых членов класса или используйте setIntent (), чтобы установить новое намерение как исходное намерение действия и обработать данные в onResume ().

ссылка на http://developer.android.com/training/basics/activity-lifecycle/starting.html

onResume() вызывается непосредственно перед началом работы с пользователем. В этот момент действие находится в верхней части стека действий, а пользовательский ввод переходит к нему. Всегда следуют onPause().

onPause() вызывается, когда система собирается начать возобновление другой деятельности. Этот метод обычно используется для фиксации несохраненных изменений в постоянные данные, остановить анимацию и другие вещи, которые могут потреблять процессор, и так далее. Он должен делать все, что он делает очень быстро, потому что следующая деятельность не будет возобновлена, пока она не вернется. Далее следует либо onResume() Если активность возвращается на фронт, или onStop() если оно становится невидимым для пользователя.

надеюсь простое объяснение : -

onStart () -> вызывается, когда активность становится видимой, но может не быть на переднем плане (например, AlertFragment находится сверху или любой другой возможный вариант использования).

onResume() -> вызывается, когда активность находится на переднем плане, или пользователь может взаимодействовать с активностью.

Comments

    Ничего не найдено.