Я пришел к точке, где я несколько шагов от лысеть ...Android остановки службы
Я пытаюсь запустить службу, которая будет проверять, если серверы в моей работе работают , Он должен делать это каждые 5 минут.
Я прошел через TimerTask, ScheduledExecutorService и, наконец, обработчик. Все они работают «отлично» в течение нескольких часов, за исключением некоторой неточности, 1-5 минут, а затем внезапно «таймер» просто прекращает стрельбу.
Теперь я прочитал, что планировщик остановится, если встретит неискушенное исключение, и я уверен, что это так же и с TimerTask. Но проверяя файлы журнала, никаких исключений вообще нет ...
Когда я вернулся с работы сегодня, я решил провести эксперимент с Handler.
Я создал 2 обработчика, один запустил бы код для проверки серверов и увеличил бы один за один раз. Другой будет просто регистрировать значение указанного int, чтобы не останавливаться, если он столкнулся с исключением (я не вижу, как это будет).
Он работает великолепно, с обычными 1-5 минут неточностями, в течение нескольких часов, а затем останавливается, ниже последние строки из журнала:
02-07 20:03:25.892 D/dalvikvm( 992): GC_EXPLICIT freed 192K, 53% free 4295K/9031K, external 3755K/4825K, paused 114ms
02-07 20:03:35.572 D/dalvikvm(5472): GC_EXPLICIT freed <1K, 54% free 2895K/6279K, external 2002K/2137K, paused 61ms
02-07 20:04:42.212 V/ServerChecker(12568): Timer triggered
02-07 20:04:42.212 V/ServerChecker(12568): Checking: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checked: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checking: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checked: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checking: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checked: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checking: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checked: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checking: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Checked: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Test timer triggered: 13
02-07 20:05:01.002 E/InputDispatcher( 223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Consumer closed input channel or an error occurred. events=0x8
02-07 20:05:01.002 E/InputDispatcher( 223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Channel is unrecoverably broken and will be disposed!
02-07 20:05:08.932 D/dalvikvm(12842): GC_EXPLICIT freed 73K, 51% free 2641K/5379K, external 2002K/2137K, paused 37ms
02-07 20:05:09.132 D/dalvikvm( 185): GC_EXPLICIT freed 11K, 53% free 2554K/5379K, external 2002K/2137K, paused 96ms
02-07 20:05:12.022 D/dalvikvm( 185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 164ms
02-07 20:05:12.062 D/dalvikvm( 185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 36ms
02-07 20:05:18.612 D/dalvikvm(12852): GC_EXPLICIT freed 59K, 52% free 2596K/5379K, external 2002K/2137K, paused 72ms
Я посмотрел на последние два сообщения относительно моего приложения и найдено this thread - Но я не вижу, как это применится в моем случае.
Надеюсь, вы, ребята, знаете, что я делаю неправильно. Я занимаюсь этим в течение нескольких недель. Попытка разных таймеров, когда таймер пытается поймать «главный» таймер, останавливаясь, а затем перезагружая его, но не повезло, и, как показывает мой последний эксперимент, похоже, проблема с таймером .. я думаю ..
Да, термин «сервис» в ОС Android не похож на службу Windows, которая просто работает в фоновом режиме навсегда - служба андроида - это просто приложение, которое не имеет интерфейса, и поэтому оно подлежит стандарту управление памятью/очистка. Тревога, призывающая к намерению, определенно подходит. –
Огромное спасибо, что сделал трюк - теперь он работает без остановки в течение 9 часов, стреляя в точную отметку в 5 минут :) - И спасибо Гаю за это объяснение – noir04
У меня такая же проблема - однако это никогда пришло мне в голову, что это может быть связано с нашей службой ... У нас есть служба, которая запускается, а затем Thread.sleeps, просыпается через некоторое время и т. д. ... Интересно, может ли это быть связано, потому что я получаю то же самое ошибка. – AgentKnopf