I have created 3 services, named as "Starter", "opener" and "closer". Starter service takes "start_time" and "stop_time" from database and schedule "opener" and "closer" services. I am repeating "Starter" service every one minute to schedule "opener" and "closer" to upcoming time.
The code in "Starter" service, read "start_time" and "stop_time" and schedule "opener" and "closer" with upcoming time, means time which is greater than NOW but lowest from all other start_time and stop_time values in the database.
My sample code of starter is:
The problem is, sometimes "opener" and "closer" both the services execute on their specified time but sometimes one of them execute at its specified time but other don't. Is there anything wrong with my code?
The code in "Starter" service, read "start_time" and "stop_time" and schedule "opener" and "closer" with upcoming time, means time which is greater than NOW but lowest from all other start_time and stop_time values in the database.
My sample code of starter is:
B4X:
#Region Service Attributes
#StartAtBoot: True
#ExcludeFromLibrary: True
#StartCommandReturnValue: android.app.Service.START_STICKY
#End Region
Sub Process_Globals
Dim sql As SQL
Dim next_sch_checker As Long = DateTime.DateTimeParse(DateTime.Date(DateTime.Now), "23:59")
Dim next_sch_checker_end As Long = DateTime.DateTimeParse(DateTime.Date(DateTime.Now), "23:59")
Dim dbname As String = "db.db"
End Sub
Sub Service_Create
End Sub
Sub Service_Start (StartingIntent As Intent)
Dim tm As Long = 0
Dim tm_end As Long = 0
next_sch_checker = DateTime.DateTimeParse(DateTime.Date(DateTime.Now), "23:59")
next_sch_checker_end = DateTime.DateTimeParse(DateTime.Date(DateTime.Now), "23:59")
StartServiceAt(Me, DateTime.Now + DateTime.TicksPerMinute, True)
If File.Exists(File.DirInternal, dbname) Then
sql.Initialize(File.DirInternal, dbname, False)
cur = sql.ExecQuery("SELECT * FROM schedule")
For i=0 To cur.RowCount-1
cur.Position = i
tm = DateTime.DateTimeParse(DateTime.Date(DateTime.Now), cur.GetString("start_time"))
tm_end = DateTime.DateTimeParse(DateTime.Date(DateTime.Now), cur.GetString("stop_time"))
If((tm >= DateTime.Now) And (next_sch_checker >= tm)) Then
next_sch_checker = tm
End If
If((tm_end >= DateTime.Now) And (next_sch_checker_end >= tm_end)) Then
next_sch_checker_end = tm_end
End If
Next
If next_sch_checker <> DateTime.DateTimeParse(DateTime.Date(DateTime.Now), "23:59") Then
StartServiceAtExact(opener, next_sch_checker, True)
End If
If next_sch_checker_end <> DateTime.DateTimeParse(DateTime.Date(DateTime.Now), "23:59") Then
StartServiceAtExact(closer, next_sch_checker_end, True)
End If
StartServiceAt(Me, (DateTime.Now + DateTime.TicksPerMinute), True)
End Sub
The problem is, sometimes "opener" and "closer" both the services execute on their specified time but sometimes one of them execute at its specified time but other don't. Is there anything wrong with my code?