Italian Chiusura httputils2service

AlpVir

Well-Known Member
Licensed User
Longtime User
Ho un'app che fra le altra ha una activity "Configurazione" la quale, alla pressione del pulsante REGISTRA" richiama un service
B4X:
 StartService(RegUtenti)
il quale esegue un Job
B4X:
JobUtenti.Initialize("JobUtenti", Me)
JobUtenti.PostString(Sito & "RegUpdateUtente.asp", Criterio)
Tutto bene; funziona tutto.
Al termine dell'activity "Configurazione" però è presente (lo vedo in Imposta > Applicazioni > Servizi in esecuzione) :
1 processo (è l'activity princiapale da cui ho lanciato "Configurazione"); è giustificato;
1 servizio (si tratta di "httputils2service" che non conosco, non l'ho lanciato io);
Alla chiusura di tutta l'app sia il processo che il servizio scompaiono, come deve essere.
Il problema è che mi da fastidio la presenza di quel servizio che sicuramente occupa memoria e CPU.
Come si fa a chiuderlo all'interno del "RegUtenti" (forse in JobDone ?) o, meglio, nell'activity "Configurazione" (in Activity_Pause ?) ?
Aggiungo ancora che il lavoro del service viene correttamente svolto. Anche attendendo 5 o 10 minuti che sia il sistema operativo a terminare quel servizio lasciando tranquillo tranquillo il device, questo non succede.
Grazie per l'attenzione.
 

djveleno

Active Member
Licensed User
Longtime User
Prova ad inserire un controllo di fine lavoro e chiudi con un stopservice(servicename)
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Grazie ma non ho capito cosa intendi per "controllo di fine lavoro".
Ho inserito anche, laddove termino la mia app, un
StopService("httputils2service")
ma giustamente mi da errore perchè non conosce 'sto httputils2service visto che non l'ho chiamato io.
Io ho solo un
StartService(RegUtenti)
Evidentemente lanciato 'sto RegUtenti si lancia anche, inplicitamente, httputils2service.
Ovviamente, tra le librerie selezionate, ho HttpUtils2 (altrimenti non posso avere degli HttpJob)

Altra cosa:
Perchè in certe parti del codice non posso scrivere
StopService(RegUtenti)
ma solo
StopService("RegUtenti") ?
Altrimenti mi viene segnalato un errore ?
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
io non ho tutto questo ma alla fine uso Job.Release

Chiamata

B4X:
        Dim sh As String = "http://www.sito.com/"
        HttpAgent.Initialize("0", Me)
        HttpAgent.PostString(sh,"pagindex=" & page)
        Utils.SetAuthCookie(HttpAgent.GetRequest)

Risposta

B4X:
Sub JobDone (Job As HttpJob)
    Try
        If Job = Null Then Return

        Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
       
        If Job.Success = True Then
            Select Job.JobName
                
                Case "0"
                  
                Case "1"
                   
                Case "2"

            End Select
        Else
            Log("Error: " & Job.ErrorMessage)
            ToastMessageShow("Error: " & Job.ErrorMessage, True)
        End If
        Job.Release
    Catch
    End Try
End Sub

Non so se ti può essere utile.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Grazie Ivano
Sostanzialmente è lo stesso codice che uso io.
L'errore (sicuramente mio) è da qualche altra parte. Ricapitolando :
Da un'altra Activity io chiamo
B4X:
Main.TipoInterventoUtente = "MESSAGGIO"
    StartService(RegUtenti)
Qui di seguito c'è la parte iniziale di RegUtenti; dovrebbe esser giusta la dichiarazione in Process_Globals, come pure l'inizializzazione in Service_Create.
Ribadisco che il tutto funziona correttamente; solo che in chiusura dell'app mi ritrovo il servizio "httputils2service" ancora attivo.
B4X:
Sub Process_Globals
    Dim JobUtenti As HttpJob
End Sub
Sub Service_Create
    JobUtenti.Initialize("JobUtenti", Me)      ' messo qui o in Service_Start fa lo stesso
End Sub

Sub Service_Start (StartingIntent As Intent)
    ' JobUtenti.Initialize("JobUtenti", Me)
    Select Case Main.TipoInterventoUtente
        Case "NUOVO"    ' aggiungo un nuovo utente
            JobUtenti.PostString(Main.Sito & "Script/RegNuovoUtente.asp", Main.CriterioGlobale )
        Case "MESSAGGIO" ' registro il  MessaggioPersonalizzabile e OraRientro
            JobUtenti.PostString(Main.Sito & "Script/RegMessaggioUtente.asp", Main.CriterioGlobale )
        Case "UPDATE"    ' modifico i dati dell'utente (parte in locale e parte sul web) 
            JobUtenti.PostString(Main.Sito & "Script/RegUpdateUtente.asp", Main.CriterioGlobale )
        Case "USERNAME"    ' controllo la presenza di una altro utente con lo stesso username 
            JobUtenti.PostString(Main.Sito & "Script/ControllaUsername.asp", Main.CriterioGlobale )
    End Select   
End Sub

Sub Service_Destroy
    Log ("il service RegUtenti è effettivamente distrutto")
End Sub

Ed ecco come termino l'app, in una ulteriore Activity :
B4X:
    Try   
        StopService("")
        ' AggiornaChk    ' aggiorno il valore dei checkbox
        Main.FlagPanelMappaVisibile = False
        Main.BooAvviato = False
        Main.ServizioGPSAvviato = False
        GPS_2.GPS1.Stop
        StopService("GPS_2")
        StopService("RegUtenti")
        ' StopService("httputils2service")
        Main.TW.Close
        Main.dbIAH.Close
        Activity.Finish
        '    ExitApplication  'NON CI VUOLE ExitApplication
    Catch
    End Try
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Risolto !
Non bisogna usare la libreria HttpUtil2 ma i 2 files HttpUtils2Service e HttpJob. Poi, alla chiusura dell'app, bisogna invocare un StopService("httputils2service").
In precedenza, con la libreria HttpUtil2 l'istruzione StopService("httputils2service") non veniva accettata.
 
Top