Служба 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.