2014-11-25 2 views
0

Моя служба выполняет onDestroy(), поднятой по телефону stopSelf(). Я делаю более продолжительную операцию очистки (может быть 10, 30 или 90 секунд) в onDestroy(). Что произойдет, если моя служба начнется сейчас?Может ли onStartCommand() вызываться при выполнении onDestroy()?

  1. Будет ли Android создавать новый экземпляр службы?
  2. Будет ли вызван onStartCommand() текущей службы?
  3. Что-то еще происходит?

ответ

2

onDestroy() вызывается в потоке пользовательского интерфейса (также называемом основной нитью). Также onStartCommand(). Следовательно, пока вы не вернетесь с onDestroy(), никакой другой метод каркаса не может быть вызван - не только для этого Service, но и для любых других Service, работающих в том же процессе. Кроме того, никакой обратный вызов для любого другого компонента (Activity и т. Д.) Не будет вызван.

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

+0

Я вижу, я об этом не думал. Итак, я начну тему в'onDestroy(), которая завершится через некоторое время. Я надеюсь, что система не убьет этот процесс (из моего прежнего опыта это не будет). – OneWorld

+0

@OneWorld Это действительно путь. Посмотрите это - http://stackoverflow.com/questions/9479311/performing-long-running-operation-in-ondestroy. Однако имейте в виду, что ваш процесс может быть убит до того, как ваш поток выполнит свою работу. См. Здесь для получения дополнительной информации: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle – curioustechizen

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