Служба Android onCreate вызывается несколько раз, не вызывая onDestroy

В моем приложении я использую службу для связи с нашим сервером. Служба создает несколько потоков очереди сообщений для решения задач с разными приоритетами.

Эта модель используется около года без больших проблем. Тем не менее, недавно я нашел некоторое время, когда onCreate моего класса службы вызывается несколько раз. onDestroy никогда не вызывается между двумя вызовами onCreate. Поэтому у меня не было шанса убить существующие потоки. Как только это происходит, служба имеет повторяющиеся потоки внутри.

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

Любые идеи?

Ответ 1

У меня была такая же проблема, когда моя служба использовала тот же процесс с действиями (по умолчанию). но больше не было проблем, когда я использовал свой сервис, используя другой процесс. Я отредактировал свой AndroidManifest.xml, как показано ниже... (добавлен атрибут android: process)

<service android:name="kr.co.pkbio.binoo.CacheFileManagerService" android:process=":kr.co.pkbio.binoo.service"/>
<service android:name="kr.co.pkbio.binoo.ActivityStackManagerService" android:process=":kr.co.pkbio.binoo.service"/>

см. http://developer.android.com/guide/topics/manifest/service-element.html для информации.

Ответ 2

У меня была точно такая же проблема, когда я имел дело с сервисом bluetooth (проблема возникла во время разработки). Когда я отключил свое устройство и убил ADB, это не повторилось, и onCreate был вызван только один раз. Я предполагаю, что это ошибка, потому что это происходит время от времени. Но, может быть, у вас есть немного другая проблема...

Ответ 3

Это может стать полезным для кого-то. У меня была такая же проблема при хранении карты через пакет в методе onSaveInstanceState в одном из моих действий. Я верю, потому что в карте содержались ссылки на объекты, которые использовались в других частях приложения (один из них был моим сервисом) каждый раз, когда я покинул указанную активность, моя служба начнется снова и снова.

Я предполагаю, что это shenanigans для Android.