I've written an app that polls an FTP server checking for a new data file and if it's there the app downloads it. The app also uploads a data file to the FTP server if one is created by my app. It all works fine. The app uses FTP.List, FTP.DownloadFile, FTP.UploadFile and FTP.DeleteFile in combination with their corresponding completed events to check the result and decide what task to perform next. I also use a short timer in case the connection stalls for whatever reason, to close the connection and try again much later. The stripped down code below is not a true reflection of the basic structure of my original app but it's close enough and does illustrate my point. If left running it will show the amount of free memory steadily decreasing albeit slightly. What, if anything is wrong with the structure of the code? Is there a better way to keep cycling through various sequential tasks endlessly (until of course the user pauses or kills the app)?
Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. Dim Timer1 As Timer Dim NextTask As Int Dim debug1 As Int Dim r As Reflector 'from library Reflection End Sub Sub Service_Create 'This is the program entry point. 'This is a good place to load resources that are not specific to a single activity. debug1 = 1 Timer1.Initialize("TimeOut1",5000) 'main timer Timer1.Enabled=False End Sub Sub Service_Start (StartingIntent As Intent) Log("Service_Start") MainLoop(0) End Sub Sub MainLoop (Task As Int) If debug1 = 1 Then Log("MainLoop Task = " & Task) If Task = 0 Then 'do something once off only NextTask = 1: Timer1.Interval = 10: Timer1.Enabled=True else If Task = 1 Then '1st task 'do something else NextTask = 2: Timer1.Interval = 10: Timer1.Enabled=True else if Task = 2 Then '2nd task 'do something else NextTask = 3: Timer1.Interval = 10: Timer1.Enabled=True else if Task = 3 Then '3rd task 'go back to the first task NextTask = 1: Timer1.Interval = 5000: Timer1.Enabled=True End If End Sub Sub TimeOut1_Tick Timer1.Enabled=False If debug1 = 1 Then Log("TimeOut1; NextTask = " & NextTask) r.Target = r.RunStaticMethod("java.lang.Runtime", "getRuntime", Null, Null) Log("Free Memory = " & (r.RunMethod("freeMemory")/(1024*1024)) & " MB") MainLoop(NextTask) End Sub 'Return true to allow the OS default exceptions handler to handle the uncaught exception. Sub Application_Error (Error As Exception, StackTrace As String) As Boolean Return True End Sub Sub Service_Destroy End Sub