2015-09-10 3 views
0

При отладке приложения в Android Studio, если у меня есть метод onDestroy в основном действии, а затем нажмите кнопку «Назад», вызывается onDestroy. Тем не менее, Android Studio по-прежнему показывает отладку. Неясно, является ли это только показ отладочного соединения между Android Studio и устройством. Если я перейду в приложение> Настройки и закрою приложение, сеанс отладки будет завершен. Это заставляет меня казаться, что мое приложение все еще работает, несмотря на то, что onDestroy называется. Но я читал в другом месте, что Android будет поддерживать приложение в памяти по соображениям производительности. Если пользователь хочет перезапустить приложение сразу, а приложение не было собрано мусором, по-видимому, более эффективно просто перезапустить приложение, которое было ранее уничтожено.Как узнать, прекращено ли приложение Android

Но это ставит вопрос о том, действительно ли вы можете сказать, действительно ли ваше приложение было прекращено, когда вы нажимаете кнопку «Назад» в основном действии. Если вызывается onDestroy, действительно ли это означает, что оно было прекращено? Я понимаю, что вы могли бы ссылаться на какой-то объект в своем коде, который не будет выпущен, но onDestroy все равно может быть вызван, но приложение остается неработающим из-за ссылочного объекта, который мешает ему собирать мусор.

Даже если вы пишете приложение с голыми костями, которое ничего не показывает, но показывает пустое действие и нажимает кнопку «Назад», куча все еще показывает ссылки. Поэтому я не понимаю, как вы можете с уверенностью сказать, что ваше приложение было прекращено.

ответ

1

Это похоже на то, что мое приложение все еще работает, несмотря на то, что onDestroy называется.

Чем скорее вы перестанете думать с точки зрения «приложения», тем больше у вас будет успех в качестве разработчика Android.

В этом случае вы, кажется, объединяете «приложение» с «процессом». Your process will continue running for some time, even when you have no UI in the foreground.

Но это ставит вопрос о том, действительно ли вы можете сказать, действительно ли ваше приложение было прекращено, когда вы нажимаете кнопку «Назад» в основном действии.

«Приложение» не завершено. Процесс прекращается. Ваш процесс не будет немедленно прекращен, когда пользователь покинет ваш пользовательский интерфейс любыми способами (BACK, HOME, whatever).

Если вызвано onDestroy, действительно ли это означает, что оно было прекращено?

Это означает, что все компоненты onDestroy() был вызван был разрушен, таким как Activity или Service.

Так что я не понимаю, как вы можете с уверенностью сказать, что ваше приложение было прекращено.

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

+0

Извините, но я не согласен с этим. Android отлично знает, работает ли ваше приложение. Это очень очевидно, когда вы переходите в App Settings, и это позволяет вам убить приложение. Вопрос в том, доступна ли эта информация для приложений, которым необходимо допросить присутствие приложения или его отсутствие. Вам также не хватает смысла.Дело в том, чтобы сказать, живое ли ваше приложение из-за какой-то неизданной ссылки или потому, что Android поддерживает его по соображениям производительности. – AndroidDev

+1

@AndroidDev: «Вопрос в том, доступна ли эта информация для приложений, которые должны опросить присутствие приложения или их отсутствие» - по определению, если ваш код запущен, у вас есть процесс. «Дело в том, чтобы сказать, живое ли ваше приложение из-за какой-то неизданной ссылки» - такой концепции нет. Теперь вы объединяете сборку мусора в процессе с управлением процессами на уровне ОС. – CommonsWare

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