Spanish Iniciar aplicacion en segundo plano

jluisruelas

Member
Licensed User
Longtime User
Amigos del quiero HACER Una aplicacion Que se ejecute automaticamente aunque el usuario la Cierre, me Dijeron ya Como, hacer que se inicie al reiniciar el telefono, pero lo que yo quiero es que la aplicacion en cuanto se inicie vaya a segundo plano. si no me doy a entender solo diganme
saludos
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Create un servicio que lo llames en el Activity_Create, y luego en el Activity_Resume haces un Activity.Finish, esto hara que finalice la aplicacion pero el Servicio estará en marcha.

Saludos
 

jluisruelas

Member
Licensed User
Longtime User
Hola

Create un servicio que lo llames en el Activity_Create, y luego en el Activity_Resume haces un Activity.Finish, esto hara que finalice la aplicacion pero el Servicio estará en marcha.

Saludos
gacias por la respuesta amigo, pero me puedes ayudar con el codigo del Activity.Finish o simplemente hago esto?
Sub activity_resume
activity.finish
End Sub
ah y el nombre tiene que ser activity_create?
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

pero me puedes ayudar con el codigo del Activity.Finish o simplemente hago esto?
Sub activity_resume
activity.finish
End Sub

Si, dentro del Acivity_Resume pones Activity.finish que lo que hace es cerrar la aplicacion.

ah y el nombre tiene que ser activity_create?

Activity_Create es unos de los eventos que ocurre cuando cargas la aplicación o haces otras cosas, y lo verás al principio en el IDE como: Sub Activity_Create(FirstTime As Boolean)

Te explico a modo rápido el ciclo de vida de Android:

ARRANCA LA APLICACIÓN -> Activity_Create (FirstTime = True) -> Resume
GIRAS LA PANTALLA -> Pause (Userclosed=False) -> Activity_Create (FirstTime = False) -> Resume
SALES MATANDO APLICACION CON Activity.Finish -> Pause (Userclosed=True)
SALES PULSANDO BOTÓN HOME (botón hard central) -> Pause (Userclosed=False)
VUELVES DESPUES DE PULSAR BOTÓN HOME -> Resume
LLAMAS A OTRO ACTIVITY DESDE Main -> Main va a Pause (Userclosed=False)
VUELVES DESDE OTRO ACTIVITY -> Main va a Resume
ENTRAS EN LA PANTALLA DE CONFIGURACION (PreferenceActivity library) -> Main va a Pause (Userclosed=False)
SALES DE LA PANTALLA DE CONFIGURACION (PreferenceActivity library) -> Main va a Resume
SALES PULSANDO EL BOTÓN DE APAGAR EL DISPOSITIVO -> Main va a Pause (Userclosed=False)
VUELVES DESPUES DE PULSAR BOTÓN DE APAGAR EL DISPOSITIVO -> Main va a Resume


Creo que tendrias que leerte el ciclo de vida de Android, y asi entenderias mejor como has de hacerlo, puedes verlo aqui:

http://www.b4x.com/android/fo...ess-and-activities-life-cycle.6487/#post37980

Y tambien la guia para principiantes, puedes bajartela aqui: http://www.b4x.com/android/files/guide.zip

A nadie nos gusta leer, pero si no entiendes lo basico de B4A , te costará mucho hacer una aplicación. Aqui en el foro nos ayudamos todos, pero tienes que leer lo basico de B4A para entender como funciona. Si vienes de Visual Basic te será mas facil entenderlo todo. No te tomes a mal mi comentario, solo intento ayudarte con tus preguntas, yo como la mayoria del foro trabajamos, y ayudamos cuando podemos, e intento despejar las dudas a los demas, que con mi corta experiencia con B4A he aprendido.


Saludos
 

jluisruelas

Member
Licensed User
Longtime User
no es quq no me guste leer amigo es que no entiendo el ingles solo lo muy basico XD pero vere como lo hago pero esto tiene que salir gracias por tu ayuda
 

jluisruelas

Member
Licensed User
Longtime User
Hola



Si, dentro del Acivity_Resume pones Activity.finish que lo que hace es cerrar la aplicacion.



Activity_Create es unos de los eventos que ocurre cuando cargas la aplicación o haces otras cosas, y lo verás al principio en el IDE como: Sub Activity_Create(FirstTime As Boolean)

Te explico a modo rápido el ciclo de vida de Android:

ARRANCA LA APLICACIÓN -> Activity_Create (FirstTime = True) -> Resume
GIRAS LA PANTALLA -> Pause (Userclosed=False) -> Activity_Create (FirstTime = False) -> Resume
SALES MATANDO APLICACION CON Activity.Finish -> Pause (Userclosed=True)
SALES PULSANDO BOTÓN HOME (botón hard central) -> Pause (Userclosed=False)
VUELVES DESPUES DE PULSAR BOTÓN HOME -> Resume
LLAMAS A OTRO ACTIVITY DESDE Main -> Main va a Pause (Userclosed=False)
VUELVES DESDE OTRO ACTIVITY -> Main va a Resume
ENTRAS EN LA PANTALLA DE CONFIGURACION (PreferenceActivity library) -> Main va a Pause (Userclosed=False)
SALES DE LA PANTALLA DE CONFIGURACION (PreferenceActivity library) -> Main va a Resume
SALES PULSANDO EL BOTÓN DE APAGAR EL DISPOSITIVO -> Main va a Pause (Userclosed=False)
VUELVES DESPUES DE PULSAR BOTÓN DE APAGAR EL DISPOSITIVO -> Main va a Resume


Creo que tendrias que leerte el ciclo de vida de Android, y asi entenderias mejor como has de hacerlo, puedes verlo aqui:

http://www.b4x.com/android/fo...ess-and-activities-life-cycle.6487/#post37980

Y tambien la guia para principiantes, puedes bajartela aqui: http://www.b4x.com/android/files/guide.zip

A nadie nos gusta leer, pero si no entiendes lo basico de B4A , te costará mucho hacer una aplicación. Aqui en el foro nos ayudamos todos, pero tienes que leer lo basico de B4A para entender como funciona. Si vienes de Visual Basic te será mas facil entenderlo todo. No te tomes a mal mi comentario, solo intento ayudarte con tus preguntas, yo como la mayoria del foro trabajamos, y ayudamos cuando podemos, e intento despejar las dudas a los demas, que con mi corta experiencia con B4A he aprendido.


Saludos
Amigo temgo el siguiente problema : la aplicación después de un tiempo me dice que ha dejado de funcionar y ce cierra, de hecho lo hace dos veces es decir, el mensaje me aparece dos veces. A qué se puede deber?
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Con tan pocos datos es dificil saber cual es el problema.

Lo mas seguro es que hayas puesto que se ponga en marcha en el reinicio del servicio con un #StartAtBoot: true , y tu la mates al iniciar y de ahi el mensaje del sistema y el otro podria ser el tuyo.
Pon logs en la parte del servicio, haz correr la aplicacion paso a paso con Debug(rapid) y asi quizas puedas ver por que se para, ese mensaje que se ha parado suele ser el tipico por lo que te he comentado, que tu le digas que arranque al reinicio y de alguna forma la estes parando, entonces el sistema te da ese mensaje.

Si aun asi no consigues saber donde esta el error, adjunta un ejemplo de lo que haces y asi podremos mirarlo y saber donde está.


Saludos
 

jluisruelas

Member
Licensed User
Longtime User
Hola

Con tan pocos datos es dificil saber cual es el problema.

Lo mas seguro es que hayas puesto que se ponga en marcha en el reinicio del servicio con un #StartAtBoot: true , y tu la mates al iniciar y de ahi el mensaje del sistema y el otro podria ser el tuyo.
Pon logs en la parte del servicio, haz correr la aplicacion paso a paso con Debug(rapid) y asi quizas puedas ver por que se para, ese mensaje que se ha parado suele ser el tipico por lo que te he comentado, que tu le digas que arranque al reinicio y de alguna forma la estes parando, entonces el sistema te da ese mensaje.

Si aun asi no consigues saber donde esta el error, adjunta un ejemplo de lo que haces y asi podremos mirarlo y saber donde está.
amigo aun no encuentro solucion te adjunto los archivos el b4a y el del servicio

Saludos
 

Attachments

  • noduerme.bas
    5.8 KB · Views: 417
  • H_L_1_3.zip
    4.1 KB · Views: 398

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola, podrias comprimir el programa con todos los ficheros y carpetas (files, Objects, etc) por que con lo que has enviado no para de dar errores al intentar compilar.

Saludos
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Ya he visto donde estaba el error, pero no creas que me he repasado todo el codigo para verlo, el codigo es demasiado extenso como para eso, y no tengo poderes para ver donde se paraba (aunque me llame Jesús :D). Simplemente he puesto a correr el programa en un movil conectado al log del B4A, y cuando ha fallado he visto donde era, aqui te pongo el codigo de error:

java.lang.IllegalArgumentException: 1 is not a valid Bluetooth address



at android.bluetooth.BluetoothDevice.<init>(BluetoothDevice.java:723)
at android.bluetooth.BluetoothAdapter.getRemoteDevice(BluetoothAdapter.java:466)
at anywheresoftware.b4a.objects.Serial.Connect2(Serial.java:146)
at anywheresoftware.b4a.objects.Serial.Connect(Serial.java:117)
at com.luc_1_3.noduerme._tiempo_conexion_tick(noduerme.java:467)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
at anywheresoftware.b4a.objects.Timer$TickTack.run(Timer.java:105)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)


at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException: java.lang.IllegalArgumentException: 1 is not a valid Bluetooth address



at anywheresoftware.b4a.BA.raiseEvent2(BA.java:200)
at anywheresoftware.b4a.objects.Timer$TickTack.run(Timer.java:105)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: 1 is not a valid Bluetooth address
at android.bluetooth.BluetoothDevice.<init>(BluetoothDevice.java:723)
at android.bluetooth.BluetoothAdapter.getRemoteDevice(BluetoothAdapter.java:466)
at anywheresoftware.b4a.objects.Serial.Connect2(Serial.java:146)
at anywheresoftware.b4a.objects.Serial.Connect(Serial.java:117)
at com.luc_1_3.noduerme._tiempo_conexion_tick(noduerme.java:467)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
... 10 more
** Service (noduerme) Create **

java.lang.RuntimeException: Object should first be initialized.



at anywheresoftware.b4a.sql.SQL.checkNull(SQL.java:48)
at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:154)
at com.luc_1_3.noduerme._service_create(noduerme.java:392)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:158)
at com.luc_1_3.noduerme.onCreate(noduerme.java:45)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2713)
at android.app.ActivityThread.access$1900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException: Unable to create service com.luc_1_3.noduerme: java.lang.RuntimeException: java.lang.RuntimeException: Object should first be initialized.



at android.app.ActivityThread.handleCreateService(ActivityThread.java:2723)
at android.app.ActivityThread.access$1900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Object should first be initialized.
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:200)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:158)
at com.luc_1_3.noduerme.onCreate(noduerme.java:45)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2713)
... 10 more
Caused by: java.lang.RuntimeException: Object should first be initialized.
at anywheresoftware.b4a.sql.SQL.checkNull(SQL.java:48)
at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:154)
at com.luc_1_3.noduerme._service_create(noduerme.java:392)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
... 13 more




Como ves en las lineas que te he marcado en verde es donde se produce el error. Le puse un LOG y la dirección MAC era igual a 1 una de las veces que dio error. Creo que todo el problema viene por ahi, tendrias que corregir de raiz el que de el error mas que taparlo con un Try Catch, aunque tampoco estaria mal ponerlo donde creas que pueda darse un error.

Bueno, al menos ya sabes por que se paraba ;)


Saludos
 

jluisruelas

Member
Licensed User
Longtime User
amigo
Hola

Ya he visto donde estaba el error, pero no creas que me he repasado todo el codigo para verlo, el codigo es demasiado extenso como para eso, y no tengo poderes para ver donde se paraba (aunque me llame Jesús :D). Simplemente he puesto a correr el programa en un movil conectado al log del B4A, y cuando ha fallado he visto donde era, aqui te pongo el codigo de error:
java.lang.IllegalArgumentException: 1 is not a valid Bluetooth address

at android.bluetooth.BluetoothDevice.<init>(BluetoothDevice.java:723)
at android.bluetooth.BluetoothAdapter.getRemoteDevice(BluetoothAdapter.java:466)
at anywheresoftware.b4a.objects.Serial.Connect2(Serial.java:146)
at anywheresoftware.b4a.objects.Serial.Connect(Serial.java:117)
at com.luc_1_3.noduerme._tiempo_conexion_tick(noduerme.java:467)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
at anywheresoftware.b4a.objects.Timer$TickTack.run(Timer.java:105)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException: java.lang.IllegalArgumentException: 1 is not a valid Bluetooth address


at anywheresoftware.b4a.BA.raiseEvent2(BA.java:200)
at anywheresoftware.b4a.objects.Timer$TickTack.run(Timer.java:105)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: 1 is not a valid Bluetooth address
at android.bluetooth.BluetoothDevice.<init>(BluetoothDevice.java:723)
at android.bluetooth.BluetoothAdapter.getRemoteDevice(BluetoothAdapter.java:466)
at anywheresoftware.b4a.objects.Serial.Connect2(Serial.java:146)
at anywheresoftware.b4a.objects.Serial.Connect(Serial.java:117)
at com.luc_1_3.noduerme._tiempo_conexion_tick(noduerme.java:467)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
... 10 more
** Service (noduerme) Create **

java.lang.RuntimeException: Object should first be initialized.


at anywheresoftware.b4a.sql.SQL.checkNull(SQL.java:48)
at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:154)
at com.luc_1_3.noduerme._service_create(noduerme.java:392)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:158)
at com.luc_1_3.noduerme.onCreate(noduerme.java:45)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2713)
at android.app.ActivityThread.access$1900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException: Unable to create service com.luc_1_3.noduerme: java.lang.RuntimeException: java.lang.RuntimeException: Object should first be initialized.


at android.app.ActivityThread.handleCreateService(ActivityThread.java:2723)
at android.app.ActivityThread.access$1900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Object should first be initialized.
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:200)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:158)
at com.luc_1_3.noduerme.onCreate(noduerme.java:45)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2713)
... 10 more
Caused by: java.lang.RuntimeException: Object should first be initialized.
at anywheresoftware.b4a.sql.SQL.checkNull(SQL.java:48)
at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:154)
at com.luc_1_3.noduerme._service_create(noduerme.java:392)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:174)
... 13 more




Como ves en las lineas que te he marcado en verde es donde se produce el error. Le puse un LOG y la dirección MAC era igual a 1 una de las veces que dio error. Creo que todo el problema viene por ahi, tendrias que corregir de raiz el que de el error mas que taparlo con un Try Catch, aunque tampoco estaria mal ponerlo donde creas que pueda darse un error.

Bueno, al menos ya sabes por que se paraba ;)


Saludos

amigo gracias por tu ayuda, te comento que el error de bluetooth y de mac son por que no esta conectado al aparato con el que se comunica, como puedo saber cual es el objeto que no se a inicializado?
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

amigo gracias por tu ayuda, te comento que el error de bluetooth y de mac son por que no esta conectado al aparato con el que se comunica
Si, pero al igual que yo que ni tenia el bluetooth en marcha :D, le podrá pasar a a tu usuario, asi que tendrias que preveer ese error y evitarlo. Yo no se que hace tu programa, solo sabia segun tu que se te paraba, asi que lo unico que hice fue ponerlo en marcha y esperar a que se parara para ver cual era el problema.

como puedo saber cual es el objeto que no se a inicializado?
Según ese error parece ser el SQL:

Caused by: java.lang.RuntimeException: Object should first be initialized.
at anywheresoftware.b4a.sql.SQL.checkNull(SQL.java:48)
at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:154)

Ya se que tu en el Main lo inicializas, pero podria ser que al entrar en el servicio (en mi prueba), main no estuviese en segundo plano, si no que la hubiese borrado, y entonces se encontrara que no estaba reiniciado.
Lo mejor en estos casos es que en el servicio, en vez de hacer referencia a main para consultar cosas del SQL, lo hagas directamente con variables locales del servicio, haces igual que en Main que compruebas si está inicializado, y a partir de ahi haces las consultas pertinentes.

Por otro lado, aunque no tenga que ver con tu pregunta original, te comento varias cosas que no deberias hacer en tu codigo, y que posiblemente eso sea la causa de no funcionar correctamente.

1)
Los temporizadores en un servicio es malo ponerlos (otros te diran que prohibitivos), y lo mas seguro es que al final fallen, normalmente Android puede matar ese servicio y al cabo del tiempo lo volverá a poner en marcha, por lo tanto tus temporizadores no funcionaran. Y mas cuando has puesto este código:
B4X:
#Region  Service Attributes
    #StartCommandReturnValue: android.app.Service.START_STICKY
Android en un momento dado puede que pare el servicio y lo vuelva a iniciar al cabo de unos segundos, ese codigo se pone para eso, para que en caso de que Android o el usuario al borrar los procesos de fondo o la memoria si el servicio se para, vuelva a ponerse en marcha.
Así que como ves tus temporizadores al final acabaran por fallar. Por otro lado, una de las finalidades del servicio es esa, actuar como temporizador al volver a llamar al servicio en StartServiceAt, por lo que tu debes programar tus tareas ahí. Y puedes hacer varias cosas, o creas variables generales y las emplea como contadores y cuando lleguen al tiempo que tu creas oportuno haces la tarea, o bien creas un servicio por cada temporizador y lo llamas en el tiempo que tu creas.
Con esto, te aseguras que aunque Android mate el servicio, al volver a crearlo se hará la tarea que tu has programado en StartServiceAt. Esto no ocurrirá con el temporizador.

2)
El Sub Service_Create no funciona igual que el Sub Activity_Create(FirstTime As Boolean), el Sub Service_Create entra solo cuando se crea el servicio, no cada vez que entra en el servicio, la condicion de entrar cada vez en el servicio se cumplirá en el Sub Service_Start (StartingIntent As Intent) y en tu ejemplo cada 5 segundos por haber puesto este codigo:

B4X:
Sub Service_Start (StartingIntent As Intent)
StartServiceAt("", DateTime.Now + 5 * DateTime.TicksPerSecond, True)
End Sub

Por lo tanto, y basandonos en el punto 1) , cuando Android mate el servicio, los temporizadores dejan de funcionar, y solo cuando lo vuelva a crear los volverá a poner en marcha, pero empezando de cero.

Resumiendo:
- Pasa tu codigo a Sub Service_Start (StartingIntent As Intent)
- En el Sub Service_Create inicializa las variables u objetos que necesites, pero no hagas llamadas a tareas, eso hazlo en Sub Service_Start (StartingIntent As Intent)
- Quita los temporizadores (al menos yo lo haria) y
haz las tareas de estos en Sub Service_Start (StartingIntent As Intent) y si necesitas varios tiempos create variables globales o servicios independientes.
También ten en cuenta que para la mayoría de aplicaciones 5 segundos es un período muy corto, ya que puedes agotar la batería del dispositivo si esto se mantiene eternamente en el tiempo, asi que intenta ajustar mas los tiempos a la necesidad que tengas y con eso harás que tu aplicacion no consuma mucha bateria.

Ya se que me dijiste que no dominas el ingles (como la mayoria que estamos en este foro :D) pero seria muy interesante que leyeras el tutorial de Erel sobre los Servicios:
http://www.b4x.com/android/forum/threads/service-modules.7542/#content

Siempre es mejor emplear el Traductor de Google que no leer nada, algo entenderas con esa traducción. Por mi parte cuando tengo un rato intento hacer algun tutorial en español de temas de mucho uso, y como abras visto otros tambien lo hacen. Pero como yo, nos debemos a nuestro trabajo diario, y hacer eso o responder en el foro es una actividad extra no renumerada, y por eso yo pongo incapie en que antes de empezar a preguntar leamos, y probemos ejemplos, y cuando lleguemos al punto que ya no podemos avanzar, entonces preguntar en el foro, al menos es lo que yo hago.

Feliz fin de semana

Saludos
 
Top