Hola a todos.
Hice una aplicación cuya tarea es recibir información y almacenarla en una base de datos sqlite. La aplicación funciona "correctamente" pero de un momento a otro se detiene.
Como tiene un servicio, al ejecutarse de nuevo el servicio la aplicación vuelve a trabajar automáticamente, pero los datos se truncan y ya no me sirven. He ejecutado la aplicación paso a paso en modo debug, pero como el fallo se puede presentar mas de una hora después de iniciar su ejecución, me es imposible ejecutar paso a paso tantos ciclos para encontrar el error. He utilizado Logs, etc pero no doy con el error.
Algo que me causa curiosidad es, si al finalizar una función, la memoria consumida por la misma se libera. Tengo entendido que eso lo hace android en el momento que él lo cree necesario.
El trabajo del programa es mas o menos así: Cada vez que el programa recibe los datos crea variables para almacenar la información recibida, las variables se almacenan en una lista, la cual se ordena, se extrae el dato que requiero, se guarda en la base de datos y finaliza la función, la cual se ejecuta de nuevo unos segundos después para repetir el proceso. La cantidad máxima de ciclos realizados de forma correcta es de unos 500, a veces menos.
Esta es la función que recibe la información. la almacena en variables y extrae el dato requerido.
¿El quiebre del programa será porque que no se eliminan las variables creadas después de usarlas y finalizar la función?
Adjunto el archivo que contiene el proyecto.
Hice una aplicación cuya tarea es recibir información y almacenarla en una base de datos sqlite. La aplicación funciona "correctamente" pero de un momento a otro se detiene.
Como tiene un servicio, al ejecutarse de nuevo el servicio la aplicación vuelve a trabajar automáticamente, pero los datos se truncan y ya no me sirven. He ejecutado la aplicación paso a paso en modo debug, pero como el fallo se puede presentar mas de una hora después de iniciar su ejecución, me es imposible ejecutar paso a paso tantos ciclos para encontrar el error. He utilizado Logs, etc pero no doy con el error.
Algo que me causa curiosidad es, si al finalizar una función, la memoria consumida por la misma se libera. Tengo entendido que eso lo hace android en el momento que él lo cree necesario.
El trabajo del programa es mas o menos así: Cada vez que el programa recibe los datos crea variables para almacenar la información recibida, las variables se almacenan en una lista, la cual se ordena, se extrae el dato que requiero, se guarda en la base de datos y finaliza la función, la cual se ejecuta de nuevo unos segundos después para repetir el proceso. La cantidad máxima de ciclos realizados de forma correcta es de unos 500, a veces menos.
Esta es la función que recibe la información. la almacena en variables y extrae el dato requerido.
B4X:
private Sub jobDone (job As HttpJob)
Try
If (job.Success) Then
If (job.JobName == "GetOrderBook") Then
Dim parser As JSONParser
parser.Initialize(job.GetString)
Dim root As Map = parser.NextObject
Dim result As List = root.Get("result")
'Creo la lista aqui para que al finalizar la funcion, la memoria se libere.
Dim ListOrden As List
'Inicializo la lista
ListOrden.Initialize
For Each colresult As Map In result
Dim Rate As Double = function.Str2double(colresult.Get("Rate"))
Dim Quantity As Double = function.Str2double(colresult.Get("Quantity"))
'Creo las variables aqui
Dim Orden As orden
Orden.Initialize
Orden.Rate = Rate
Orden.Quantity = Quantity
'Guardo la variable en la lista
ListOrden.Add(Orden)
Next
'Ordeno la lista segun requiera
'Ordenar
If (M_Type == "buy") Then
ListOrden.SortType("Rate", False)
End If
'Ordenar
If (M_Type == "sell") Then
ListOrden.SortType("Rate", True)
End If
'Me intereza solo el primer elemento de la lista.
'Pero como es un objeto de tipo 'orden' lo guardo en la ultima variable 'orden'
'Ya no importa su contenido
Orden = ListOrden.get(0)
'Si no han habido problemas, guardamos el dato requerido en un variable,
If M_IsActive Then
M_Now = Orden.Rate
End If
'Dim success As String = root.Get("success")
'Dim message As String = root.Get("message")
End If
End If
'Si no hay problemas se puede recibir nueva información
M_IsActive = True
Catch
Log(LastException)
ToastMessageShow("Orderbook.jobDone" & M_MarketName & LastException, True)
'Si hay problemas. No se almacena nueva información
M_IsActive = False
End Try
End Sub
¿El quiebre del programa será porque que no se eliminan las variables creadas después de usarlas y finalizar la función?
Adjunto el archivo que contiene el proyecto.
Attachments
Last edited: