Spanish [SOLUCIONADO] cerrar Activity

benji

Active Member
Licensed User
Longtime User
Buenos dias muchachos, tengo un "error" que solo me aparece a veces, y solo en algunas aplicaciones...
el tema es que a veces al cerra un activity y volver a la pantalla principal por decirlo de alguna forma, se vuelve abrir el activity que habia cerrado.
Estoy usando activity.finish al salir, esta bien o necesito algo mas?

Saludos.
 

JordiCP

Well-Known Member
Licensed User
Longtime User
El tema podría ser el siguiente.

Si lanzaste el activity2 (la que estàs cerrando) desde un activity1 (el main), cuando cierras el 2 volverá al 1, quizás al Activity_Create o al Activity_Resume del mismo según si el sistema se lo ha cargado o no.

Deberías ver si la condición por la cual desde el activity1 se lanza el activity2 sigue activa, y forzar que no lo haga, por ejemplo con alguna variable de Process_Globals que se ponga a cero una vez has lanzado la activity2.

Los logs del sistema te pueden ayudar a ver qué es lo que está pasando.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Benji

Mirate mi tutorial de Guia rápida del Ciclo de Vida de Android (https://www.b4x.com/android/forum/threads/b4a-tutorial-guia-rápida-del-ciclo-de-vida-de-android.38760/ ) y puede que encuentres la respuesta:

LLAMAS A OTRO ACTIVITY DESDE Main -> Main va a Activity_Pause (Userclosed=False)
VUELVES DESDE OTRO ACTIVITY -> Main va a Activity_Resume

Estoy usando activity.finish al salir, esta bien o necesito algo mas?
Si, es la forma correcta de cerrar un formulario.

Deberías ver si la condición por la cual desde el activity1 se lanza el activity2 sigue activa
Despues de llamar a un StartActivity(NombreFormulario) , se hace todo el código que le sigue, siempre y cuando no le metas un bucle. Y despues de ejecutar ese código va a Activity_Pause (Userclosed=False) . Creo que lo mas seguro es que la llamada se esté haciendo desde el Activity_Resume (es solo una suposición)

Saludos
 

benji

Active Member
Licensed User
Longtime User
mmmm, no me cuadra... aqui dejo el codigo del main...

B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Dim HoraCierre As TimeDialog
   
    Activity.LoadLayout("Inicio")
    Activity.Title = "Galgo BUS"
    MainRecorrido = ""
    MainRuta = File.DirRootExternal
    If FirstTime Then
        OnLineOK = False
    End If
    If File.Exists(MainRuta,"Galgo.s3db") = False Then
        Msgbox("Se copia","Copiando...")
        File.Copy(File.DirAssets,"Galgo.s3db",MainRuta,"Galgo.s3db")
    End If
    DBMain.Initialize(MainRuta,"Galgo.s3db",False)
    CurMain = DBMain.ExecQuery("Select * from Param")
    If CurMain.RowCount > 0 Then
        CurMain.Position = 0
        MainId = CurMain.GetInt("Maquina")
        MainPatente = CurMain.GetString("Patente")
        MainChofer = CurMain.GetString("Chofer")
    Else
        Msgbox("Debe ingresar los parametros de la Maquina","Apertura")
    End If
    'Initialise the HttpJob to Check the server.
    Job1.Initialize("Job1",Me)    
    'Do the Http Request.
    Job1.Download2("http://api.exg.me/api/Jobs",Array As String("passkey","10897"))
   
    HoraCierre.Is24Hours = True
    DateTime.TimeFormat="HH:MM:SS"
    Dclock.Initialize("Dclock")
    Activity.AddView(Dclock, 100dip, 5dip, 400dip, 100dip)
    Dclock.Color = Colors.Gray
    Dclock.TextColor = Colors.White
    Dclock.TextSize = 60dip
    Dclock.Gravity = Gravity.CENTER
   
   
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
Sub btnRuta_Click
    StartActivity("Ruta")
End Sub
Sub btnParam_Click
    StartActivity("Param")
End Sub
Sub JobDone (Job As HttpJob)
    Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
        If Job.Success = True Then      
            Select Job.JobName
                Case "Job1"          
                    If Job.GetString.Contains("10897") Then  
                         dbM.Initialize("MySQL","xxx.xxx.xxx.xxx","xxxx","xx","Galgo")
                    Else
                         Msgbox("No tiene Conexion a Internet","Galbus")
                    End If          
            End Select  
        Else
                      Msgbox("Problemas para conectar al servidor","Galbus")                  
        End If
      
End Sub

podria ser que las respuestas de los "Job" lleguen una vez que se ha comenzado el otro activity y por eso vuelve?
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Benji

Sin ver el codigo inicialmente era dificil saber el problema, ahora con el código que has puesto está mas claro.

Como tu bien dices, las respuestas de los Job, o sea, cuando entra en el evento Sub JobDone (Job AsHttpJob) es el que te está haciendo volver al formulario. Y esto coindice con lo que decias al principio del Post de que te aparece a veces. Por que la respuesta dependerá de la velocidad del servidor y del dispositivo, por eso era un "error" aleatorio (los peores de localizar)

Pásalo a un módulo de clase o a un servicio y desde alli controlas si quieres activar algun formulario, dar un mensaje, etc cuando se active el evento. Si lo metes en un servicio no des un mensaje Msgbox que te dará problemas, hazlo con un ToastMessageShow

Saludos
 

benji

Active Member
Licensed User
Longtime User
ya, me parecia que podria ser eso, pero no estaba seguro, a veces si, a veces no... jajaja...
ahora voy a ver como lo manejo...
gracias.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Benji

Si te quedó solucionado el problema, podrias añadir a la cabecera [SOLUCIONADO]? asi hacemos mas ágil el foro.
Gracias

Saludos
 
Top