Сколько времени можно уделить внутри Ondestroy () до того, как деятельность будет убита?
-
10-10-2019 - |
Вопрос
Я знаю, что моя подпись вопроса, должно быть, звучала действительно расплывчато. Но позвольте мне прояснить это здесь.
Скажем, у меня есть приложение для 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 секунд. Но я не знаю это точно, только предполагая.