Andróide: Agendamento da reinicialização do serviço com falha com ENORME atraso?
Tenho um serviço em execução que o sistema operacional está matando - o problema é que, quando o mata e programa a reinicialização, está sendo programado para reiniciar mais de uma hora depois. Este serviço mantém dois receptores para alterações na conexão bluetooth, e é por isso que preciso reiniciar muito mais rapidamente, em vez de ficar no estado "Reiniciando" por mais de uma hora.
Aqui está um trecho do log:
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`
Após esse período de 3600 segundos, ele simplesmente será eliminado e reagendado novamente por 2 horas depois, e assim por diante. Quando isso acontece, parece que onDestroy (), onCreate () e onStartCommand () não estão sendo chamados. Iniciar a atividade principal reiniciará o serviço com êxito e tudo ficará bem por algumas horas até que isso comece a acontecer novamente.
Isso começou a acontecer quando eu fiz uma alteração que exige que eu passe extras quando o serviço for iniciad
Aqui está meu onStartCommand e onCreate se isso ajudar ...
@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());
}
Qualquer conselho sobre o que estou fazendo de errado seria muito apreciado. Eu procurei, mas não encontrei nada que pareça estar relacionado a esse longo atraso na reinicialização. A atividade pai precisa estar ativa paraSTART_REDELIVER_INTENT
trabalhar? (Portanto, quando minha atividade principal é limpa, não consigo mais reiniciar o serviço sem reabrir a atividade principal?) Ou está acontecendo outra coisa?