Hola:
Varias cosas:
si no estoy en la primera pantalla no me salta el mensaje
Cuando sales de un Activity y entras en otro, el ciclo de vida se va a
Sub Activity_Pause (UserClosed As Boolean) del Activity donde estas, y luego entra en el
Sub Activity_Create(FirstTime As Boolean) del que has llamado. Asi que al entrar ese Activity en Pause el temporizador se para, mirate el ciclo de vida:
https://www.b4x.com/android/forum/threads/b4a-tutorial-guia-rápida-del-ciclo-de-vida-de-android.38760/
Para que un temporizador no te cree varias instancias cada vez que entras en un Activity, lo debes declarar en
Sub Process_Globals que al no ver el código igual lo has hecho bien.
Una forma estandar para que no te cree varias instancias del mismo temporizador seria asi:
Sub Process_Globals
dim Timer1 as Timer
' .............
' .............
' .............
Sub Activity_Create(FirstTime As Boolean)
if FirstTime then
Timer1.Initialize("Timer1", 6000)
Timer1.Enabled = True ' esto puedes hacerlo desde donde te interese ponerlo en marcha
End if
NOTA: Si no lo pones cuando FirstTime se cumpla, simplemente al girar la pantalla volverá a crearte una nueva instancia del temporizador, y esto hará que entre a los seis segundos de entrar en el Create, mientras las instancias anteriores entraran cuando se cumplan los seis segundos, puede ser un buen quebradero de cabeza dependiendo que hagas en el evento del temporizador.
Como bien te han comentado, si lo tienes que llamar de diferentes módulos te iria bien crearlo en un servicio, pero como te ha comentado
jparraga haciendo llamadas
StartServiceAt( , el problema es que con esa llamada tan corta de seis segundos vas a consumir muchos recursos.
Mejor (personalmente) que crees uno por Activity y de esa forma cuando salgas de el se parará, y no tendrás que estar gestionado el servicio (marcha/paro y en que modulo está para sacar el MsgBox) desde los diferentes Activity.
Saludos