Hola Psdos:
Varias cosas, seria interesante que antes de bloquear o desbloquear la pantalla, primero comprobaras en que estado está, y dependiendo de este actuar:
	
	
	
	
	
	
	
	
	
		Sub ComprobarBloqueoPantalla As Boolean
dim PantallaBloqueada as boolean
r.Target = r.GetContext
r.Target = r.RunMethod2("getSystemService", "keyguard", "java.lang.String")
PantallaBloqueada = r.RunMethod("inKeyguardRestrictedInputMode")
Return  PantallaBloqueada
End Sub
	 
	
	
		
	
 
Si añades en el servicio:
	
	
	
	
	
	
	
	
	
		#Region  Service Attributes
   #StartCommandReturnValue: android.app.Service.START_STICKY
	 
	
	
		
	
 harás que el sistema al matar el servicio lo vuelva a ejecutar (
https://www.b4x.com/android/forum/threads/b4a-tutorial-módulos-de-servicio.42689/ )
La inicialización del temporizador mejor que la quites donde está, por que si ocurre mas de una vez sin salir de la aplicación (girando la pantalla por ejemplo) te va a crear varias instancias del evento y te volverás loco cuando te ejecute el codigo n veces . Deja donde has puesto el habilitarlo. Y tambien pasa el inicializar las TTS. y Pones en el 
Sub Process_Globals la declaración del temporizador
	
	
	
	
	
	
	
	
	
		Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then 
  ' pon tambien el timer1
  Timer2.Initialize("Timer2", 5000) 
  TTS1.Initialize("TTS1")
  TTS1.SetLanguage("es_SP","")
end if
	 
	
	
		
	
 El servicio no lo matas solo con 
CancelScheduledService(DeviceWakupService) , con eso para las llamadas pendientes que has echo con 
StartServiceAt , para pararlo debes :
	
	
	
	
	
	
	
	
	
		StopService(DeviceWakupService)
	 
	
	
		
	
 
Otro problema es que "te comeras" la bateria llamando a un servicio cada segundo, si sabes que quieres dar el aviso a las 12 en punto (o cualquier otra hora), haz una llamada al  
StartServiceAt restando el tiempo actual a esa hora de la alarma.  
De la forma que has planteado la aplicación, "siempre" estará activa, por tanto un servicio no tiene sentido, y digo siempre, por que depende de los ajustes, al tiempo se apagará la pantalla y tu aplicación se ira a Pause.
Por otro lado, al poner en marcha el temporizador 2 en el 
Resume, la primera vez que entres no está el checkbox activo por lo que el timer2 no se pondrá nunca en marcha a menos que gires la pantalla.
Mírate el ciclo de vida de Android 
https://www.b4x.com/android/forum/t...ia-rápida-del-ciclo-de-vida-de-android.38760/
Que seria mas operativo? 
- pon un botón de salir, cuando lo pulses pon en marcha o paras el servicio, grabas el estado del check a un fichero y sal de la aplicación. También puedes mirar el evento 
Pause y hacerlo allí
- Cuando entres, en 
Create, lee el fichero y pon el check como estaba la ultima vez
- en el servicio haz que se vuelva a llamar momentos antes de que se cumpla tu hora de alarma, de esa forma ahorras bateria. Cuando esta se cumpla llamas a main (StartActivity(Main)) , en main en 
el 
Sub Activity_Create(FirstTime As Boolean) comprueba si la pantalla está bloqueada, desbloqueala y en 
Resume llamas a hablar. Emplea la biblioteca 
Phone y el evento 
TextToSpeechFinish y así sabrás ciertamente cuando tu mensaje de voz finalizó y te ahorras el timer 2 .
	
	
	
	
	
	
	
	
	
		Sub Process_Globals
dim EstadoVoz As PhoneEvents
'..........
'..........
'..........
Sub Activity_Create(FirstTime As Boolean) 
Dim PhoneId As PhoneId
Dim PE As PhoneEvents
EstadoVoz.InitializeWithPhoneState("PE",PhoneId)
'..........
'..........
'..........
Sub PE_TextToSpeechFinish (Intent As Intent)
  ' MensajeVozFinalizado
  ' pon tu codigo
End Sub
	 
	
	
		
	
 
Saludos