innanzitutto sul tuo progetto devi aggiungere un "Service Module",
poi dentro agli attributi del servizio devi aggiungere:
#StartCommandReturnValue: android.app.Service.START_STICKY
Questo fa in modo che se il SO distrugge il tuo servizio, venga subito ricreato.
Questo sistema ha anche il vantaggio di ridurre il consumo di batteria, ma proprio per questo non è molto preciso quando deve essere chiamato ad una determinata ora (infatti da me sbaglia di circa 2-3 minuti).
Quando il servizio viene chiamato, fai tutto quello che devi fare, poi calcoli quando deve essere richiamato di nuovo questo servizio,
e utilizzando il comando StartServiceAt specifichi data e ora
Sergio