Как работают жизненные циклы Android в отношении всего приложения? - PullRequest
6 голосов
/ 21 октября 2010

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

Прежде всегоКогда я говорю «Приложение», я имею в виду расширение класса Application.http://developer.android.com/reference/android/app/Application.html

У меня есть следующие вопросы, некоторые из них связаны.

  1. Когда пользователь покидает активность из приложения и переходит в активностьдругого приложения, приложение как-то тоже приостанавливается, даже если у него нет onPause ()?Или он продолжает жить без остановки, пока все его действия не будут уничтожены?

  2. когда приложение останавливается?Когда все его действия будут уничтожены?

  3. Есть ли вероятность того, что одно из действий приложений может выполняться без экземпляра приложения, или класс приложения всегда будет существовать, еслииз Активностей?

  4. Если в Приложении запущен какой-то процесс, и все Действия приостановлены, будет ли этот процесс продолжаться?

  5. Влияет ли приложение на ротацию каким-либо образом или ротация только меняет активность?

Спасибо

Ответы [ 4 ]

7 голосов
/ 21 октября 2010
  1. Как вы говорите, приложение не имеет onPause, поэтому ничего не происходит с приложением. Когда onPause вызывается в вашей Activity, ничего особенного не происходит, ваша Activity продолжает работать и может делать все, что захочет, включая запуск новых потоков, таймеры могут отключаться, что угодно.

  2. Я полагаю, что вы спрашиваете: когда уничтожается приложение и когда вызывается метод onTerminate в приложении? Ответ трудно точно определить, и это зависит от системы, это не обязательно происходит, когда все действия вызывают onDestroyed. На самом деле, даже когда вызывается onDestroy, ваша деятельность не обязательно является сборщиком мусора. Когда системе не хватает памяти, процесс, в котором живет Ваше Приложение, может быть уничтожен, а это означает, что Ваше Приложение исчезнет; onTerminate может или не может быть вызван. В это время все действия, услуги и т. Д. Также будут убиты.

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

  4. Процессы никогда не приостанавливаются в Android, метод onPause на самом деле ничего не делает, кроме как сказать вам, чтобы что-то приостанавливалось в вашем приложении. Помимо этого процесс продолжает пускаться в пух, ваши потоки продолжают работать, даже основной поток получает Интенты с BroadcastReceiver.

  5. Приложение получает обратные вызовы ротации в onConfigurationChanged () приложения. Я не уверен, что вы можете отключить это, поскольку нет атрибутов configChanges, поддерживаемых тегами приложения в AndroidManifest.xml.

Хорошее сравнение с Application - это статическое поле в любом из ваших классов. Статические поля будут жить до тех пор, пока процесс не будет уничтожен, как приложение. Статические поля могут быть доступны для всех операций, служб и т. Д. (При условии, что статические поля являются открытыми), так же как и ваше приложение.

Удачи! Jacob

2 голосов
/ 26 марта 2011

Экземпляр Application может продолжать существовать после уничтожения вашего последнего действия. Даже если ВСЕ действия исчезнут (т. Е. У всех были вызваны методы onDestroy), экземпляр Application все еще может существовать.

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

2 голосов
/ 21 октября 2010

Самый простой способ понять это - просто забыть, что приложение существует. Приложение не имеет ничего общего с жизненным циклом приложения. Это просто глобальный процесс, который может быть полезен для некоторых вещей, но не нужен ни для чего. Все о том, как работает приложение, вращается вокруг компонентов Activity, BroadcastReceiver, Service и ContentProvider, объявленных в его .apk.

0 голосов
/ 21 октября 2010

Все это подробно объясняется здесь: http://developer.android.com/reference/android/app/Activity.html. Если вы прочитаете это, вы должны все понять.

Очень быстро:

  1. Каждыйу активности есть пауза.Вы можете не переопределять его, но тем не менее он будет вызван.Как только вы отключитесь, будет вызвана onPause.

  2. Определите «стоп».Определите «Приложение».Процесс может длиться вечно, но он просто будет спать и ждать, пока не будет запущено одно из его действий.

  3. Невозможно, чтобы действие существовало без создания экземпляра.

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

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

...