Ciao Valentino,
dalle tue domande direi che tu abbia seguito il consiglio di
@Sagenut e studiato il codice proposto.
Per avviare il servizio in base ad un evento interno all'app (es. tasto premuto, condizione verificata..) utilizzi StartService(<nome servizio>); questa istruzione avvia il servizio "a richiesta" in quel momento (più o meno, ricorda che c'è sempre una coda di "messaggi" ovvero di azioni che si forma e man mano viene smaltita, quindi nulla è davvero immediato).
Nell'esempio citato, si usa anche StartServiceAt quale misura di sicurezza, in modo che se Android dovesse decidere di terminare il servizio, questi verrebbe lanciato nuovamente all'orario indicato (sempre più o meno). Potresti calcolare qualcosa tipo orar_attuale + 30 minuti, esattamente come nell'eesmpio..
Per fermare un servizio, utilizzi StopService, ma se hai fatto uso anche di StartServiceAt devi abbinare l'istruzione CancelScheduleService in modo che sia cancellata anche la "prenotazione" di futuro avvioo.
La notifica prevede già l'indicazione dell'activity da attivare quando viene cliccata. Un meccanismo simile lo trovi anche nei widget. Sarà Android a portare in primo piano l'app e portarsi sull'activity indicata. Un punto importante è verificare che non abbia dipendenze da informazioni sparse altrove e che potrebbero non essere disponibili nel momento del riavvio (es. un file chiuso, un percorso non salvato, un DB non inizializzato..)
Per monitorare il servizio, dall'interno dell'app, direi che ti sia sufficiente una variabile globale nel modulo Starter che venga aggiornata dals ervizio in base ad un qualche criterio. Quando l'app è attiva, consulti tale variabile e sai se il servizio sta funzionando regolarmente o meno.
Se invece desideri monitorare il funzionamento in gerale, dovresti pensare ad un watchdog, ovvero un'app separata che testi la regolare esecuzione della prima e provveda a riavvio o alert in caso di problemi.
Parti con un'implementazione semplice e ridotta all'osso. Poi man mano aggiungi funzionalità e verifica se tutto continua a funzionare come atteso.