Android: планирование перезапуска сбойного сервиса с ОГРОМНОЙ задержкой?
У меня запущена служба, которую ОС убивает - проблема в том, что когда она убивает ее и планирует перезапуск, она запланирована на перезапуск через час. Эта служба поддерживает два приемника для изменений соединения Bluetooth, поэтому мне нужно гораздо быстрее перезапускать, чем сидеть в состоянии «Перезапуск» более часа.
Вот отрывок из журнала:
I/ActivityManager( 1064): No longer want com.deadbeat.bta (pid 25455): hidden #17
W/ActivityManager( 1064): Scheduling restart of crashed service com.deadbeat.bta/com.deadbeat.btalib.BTService in 3600210ms`
По истечении этих 3600 секунд он просто убьет его и снова перенесет на 2 часа, и так далее. Когда это происходит, кажется, что onDestroy (), onCreate () и onStartCommand () не вызываются. Запуск основного действия успешно перезапустит службу, и все будет хорошо в течение нескольких часов, пока это не произойдет снова.
Это начало происходить, когда я сделал изменение, которое требует, чтобы я передал дополнительные услуги, когда служба запущена.
Вот мои onStartCommand и onCreate, если это поможет ...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("BTA", ">>> onStartCommand()");
setIntent(intent);
Bundle extras = getIntent().getExtras();
if (extras != null) {
setGlobals((Globals) extras.getSerializable("Globals"));
}
if (getGlobals() == null) {
Log.e("BTA", "!!! Call an ambulance!!");
}
Log.i(getGlobals().getLogPrefix(), ">>> Service starting up");
setWorker(new BTAWorker(this, getGlobals()));
getWorker().doLog("Service Worker Set and Active");
return START_REDELIVER_INTENT;
}
@Override
public void onCreate() {
// Create
super.onCreate();
Log.d("BTA", ">>> onCreate()");
// Register BroadcastReceiver with connect and disconnect actions
IntentFilter intentToReceiveFilter = new IntentFilter();
intentToReceiveFilter.addAction("android.bluetooth.device.action.ACL_CONNECTED");
intentToReceiveFilter.addAction("android.bluetooth.device.action.ACL_DISCONNECTED");
registerReceiver(this.mIntentReceiver, intentToReceiveFilter, null, this.mHandler);
Log.d("BTA", ">>> Bluetooth State Receiver registered");
Log.d("BTA", ">>> Intent = " + getIntent());
}
Любой совет о том, что я делаю неправильно, будет принята с благодарностью. Я искал, но не нашел ничего похожего на эту долгую задержку перезапуска. Должна ли родительская активность быть активной дляSTART_REDELIVER_INTENT
работать? (Поэтому, когда моя основная деятельность очищена, я больше не могу перезапустить службу без повторного открытия основной операции?), Или что-то еще происходит?