2015-03-30 3 views
5

Я пытался научиться точно, когда метод onDestroy вызывается для активности, но я прочитал некоторую запутанную и противоречивую информацию. В общем, мой вопрос: при каких обстоятельствах метод onDestroy фактически вызвал активность? Более конкретно, если у меня есть два действия, активность A и активность B, если выполняется действие A, и я создаю намерение и переключаюсь на активность B, является ли действие A остановлено или оно уничтожено?onStop vs onDestroy

+4

Проверить Android Lifecyle на Android: http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods- для –

+1

Возможный дубликат [Android onStop/onDestroy - когда они могут быть использованы?] (http://stackoverflow.com/questions/7236357/android-onstop-ondestroy-when-might-these-be-used) –

ответ

3

Как говорится в официальном documentation:

onDestroy() 

Последний вызов появляется перед вашей деятельности будет уничтожен. Это может произойти либо из-за завершения операции (кто-то назвал finish() на ней, либо потому, что система временно уничтожает этот экземпляр активности для экономии места. Вы можете различать эти два сценария с методом isFinishing().

В вашем примере активность A останавливается и может быть уничтожен системой


Примечание на documentation ссылке выше:

... не рассчитывать на [ onDestroy()] называют в качестве места для сохранения данных ... [см.] либо onPause(), либо onSaveInstanceState(Bundle).
+0

Активность может не были остановлены, если система не должна восстанавливать память для другой задачи/процесса, она должна находиться в состоянии паузы в целом. – whoami

+1

OnDestroy будет вызываться непосредственно из любого вызова до конца() в onCreate, пропуская onStop. onDestroy можно оставить после убийства, когда onStop вернется. Начиная с Honeycomb, приложение не находится в состоянии killable, пока не вернется его onStop(); pre-honeycomb onPause - это убиваемое состояние. –

-6

onDestroy() вызывается всякий раз:

  • Пользователь берет свою деятельность с экрана «Недавние приложения».
  • Пользователь извлекает активность из экрана «последние приложения».

onStop() вызывается всякий раз:

  • пользователь покидает текущую деятельность.

Итак, в вашем примере, когда пользователь запускает Activity B, Activity A называется onStop().

EDIT: Метод onDestroy() не всегда вызывается, в соответствии с документацией. onStop() всегда вызывается, поэтому переместите код, который вы явно должны сделать до того, как действие перестанет работать.

Надеется, что это помогло: D

+0

Не совсем.Это * возможности *, но нет гарантии, что onStop() или onDestroy() будут вызываться всегда. –

+0

@ChrisStratton Если вы используете '@ Override' перед этим методом, он гарантирует запуск кода в этом конкретном методе, в этом случае' onStop() 'и' onDestroy() ' –

+0

Нет, это не так. См. Документацию. Система может просто просто убить процесс, не утруждая себя вызовами этих методов. Как правило, они будут называть их, но документы говорят, что это бесплатно. –

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