Сколько времени можно уделить внутри Ondestroy () до того, как деятельность будет убита?

StackOverflow https://stackoverflow.com/questions/3986854

Вопрос

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

Скажем, у меня есть приложение для Android через стек промежуточного программного обеспечения. В Oncreate () моей деятельности я инициалирую свои промежуточные модули.

В его ondestroy () я должен дефектировать промежуточное программное обеспечение. Теперь мои вызовы промежуточного программного обеспечения могут занять довольно много времени для обработки. Поэтому я хочу знать, сколько времени выполняет функция Ondestroy (), и посмотреть, может ли моя деинилизация иметь место в течение этого времени.

Разумно ли держать мой деинт в Ondestroy ()?

Кроме того, предположим, что я инициализирую промежуточное программное обеспечение в Oncreate () действия A1. На кнопке нажмите, действие A1 переключается на действие A2. В ситуациях с низкой памятью LMK убьет деятельность, которая не использовалась в течение некоторого времени. В таком случае не будет убита деятельность A1? Когда деятельность A1 будет убита, будут ли все случаи, которые я создаю в A1, также станут расслабленными?

С уважением, Кики

Это было полезно?

Решение

Я считаю, что вы довольно запутались, чтобы задать этот вопрос.

Чтобы получить хорошее понимание того, что происходит, вы должны взглянуть на графики жизненного цикла, которые можно найти на Developer.android.com:

Вы увидите это Activity.onDestroy() только вызывается в случае контролируемого отключения деятельности - что -то, что происходит чрезвычайно редко, поскольку ОС Android может убить ваш процесс в различных состояниях, даже не называя вашего onDestroy() метод

Что и зачем вам дефект?

  • Если вы беспокоитесь о выпуске ресурсов, то большинство из них будут выпущены в любом случае, когда/если ваш процесс будет убит.
  • Если вы беспокоитесь о сохранении данных пользователя (состояние вашего приложения), вам следует переопределить onSaveInstanceState() и onRestoreInstanceState()

Если вы действительно хотите ответить на ваш вопрос, то вот оно:

  • Пока он работает onDestroy(), ваше приложение имеет (вероятно) столько времени, сколько и хотелось бы - тот факт, что оно даже работает onDestroy() означает, что ОС не выбрала ее, чтобы быть убитым. Но это, скорее всего, не имеет значения: с одного, onDestroy никогда не будет запущен в большинстве приложений, и если ОС изменит свое мнение и решит, что ваше приложение должно умереть, оно убьет его, даже если она работает onDestroy.

Другие советы

http://developer.android.com/guide/practices/design/responsiviness.html:

В Android системные охраняют против приложений, которые недостаточно отзывчивы в течение определенного периода времени, отображая диалог для пользователя, называемого приложением не отвечающего (ANR).

Диалог ANR обычно появляется, если ваше приложение не реагирует в течение 5 секунд. Как указал Jhominal, onDestroy() Метод, вероятно, не там, где вы хотите выполнить свои предпочтения в очистке/сохранение/и т. Д.

Независимо от того, где вы решите сделать это, будь то onDestroy(), onSaveInstanceState() или в onPause(), Я полагаю, что общее правило 5 секунд будет применяться. Если то, что вы делаете, займет более 5 секунд, диалоговое окно ANR покажет, и пользователь может принудительно засунуть ваше приложение.

Редактировать:Если ваше приложение находится в фоновом режиме, может быть (вероятно?), Чтобы оно было убито непосредственно без отображения диалога ANR, если вы нарушаете правило 5 секунд. Но я не знаю это точно, только предполагая.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top