Italian Effetto brutto alla chiusura di un'app

LucaMs

Expert
Licensed User
Longtime User
Lo Startactivity (intent) lo faccio perchè è il codice che dopo vari tentativi sono riuscito a trovare per avviare e per stoppare l'app OpenVPN. (vedi qui)
A proposito, non avrei problemi a postare il sorgente, ma dovresti poi scaricarti l'app OpenVPN.. (oppure remmare la linea StartSophosClient)
Trq, ho capito; lanci un'Activity di quell'app, ok.
 

LucaMs

Expert
Licensed User
Longtime User
Il Log l'ho creato ma non mi dice nulla di particolare se vuoi te lo mando
Sì, "posta" (pubblica) il log.
Metti un log anche all'inizio della routine
B4X:
Sub StopSophosClient
   Log("lancio la disconnessione")
 

Sabotto

Active Member
Licensed User
Ho lanciato l'app in debug mode. Poi ho cliccato direttamente su Exit. ecco il LOG


** Activity (main) Create, isFirst = true **
*** mainpage: B4XPage_Created
*** mainpage: B4XPage_Appear
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
lancio la disconnessione StopSophosClient
** Activity (main) Pause event (activity is not paused). **
*** mainpage: B4XPage_Disappear [mainpage]
** Activity (main) Resume **
*** mainpage: B4XPage_Appear [mainpage]
*** mainpage: B4XPage_Disappear [mainpage]
** Activity (main) Pause event (activity is not paused). **
*** mainpage: B4XPage_Disappear [mainpage]
 

LucaMs

Expert
Licensed User
Longtime User
lancio la disconnessione StopSophosClient
** Activity (main) Pause event (activity is not paused). **
*** mainpage: B4XPage_Disappear [mainpage]
Fai una prova (piuttosto "brutale").
Metti una variabile nella Class_Globals, ad esempio:
Private mStoChiudendo As Boolean

Impostala su True all'inizio della routine StopSophosClient:
B4X:
Sub StopSophosClient
   Log("lancio la disconnessione")
   mStoChiudendo = True

Poi nella routine-evento B4XPage_Disappear metti:

If mStoChiudendo Then ExitApplication.

P.S. la routine evento B4XPage_Disappear al 99% non ce l'hai, devi scriverla:
B4X:
Private Sub B4XPage_Disappear
    If mStoChiudendo Then ExitApplication
End Sub
 

Star-Dust

Expert
Licensed User
secondo me il problema è in StopSophosClient
 

Star-Dust

Expert
Licensed User
secondo me il problema è in StopSophosClient
Mi potrò sbagliare ma se lo toglie secondo me non lo fa più...

Comunque un ideuzza su come evitarlo forse c'è , visto che questo servizio è dichiarato come un attività..

Comunque mi ritiro dalla conversazione..
 

Star-Dust

Expert
Licensed User
Andiamo bene... dall'altra parte il massimo esperto dice di non aver proprio capito la domanda... Non penso di aver chiesto una cosa incomprensibile. forse non risolvibile, ma non incomprensibile..
Erel ha chiesto perché metti exitApplicaton (che non si usa di solito) insieme a close(Me).. in un thread ha spiegato come chiudere un app B4XPages... Comunque...
 

LucaMs

Expert
Licensed User
Longtime User
Mi potrò sbagliare ma se lo toglie secondo me non lo fa più...
Eh ma se hai letto i post preDecenti, lui lancia un'app esterna e ne utilizza i servizi (non intesi come servizi Android) e quando vuole chiudere la propria app vuole disconnettere quell'app dalla VPN e deve farlo in quel modo, usando un Intent ("verso" quell'app).


Erel ha chiesto perché metti exitApplicaton (che non si usa di solito) insieme a close(Me).. in un thread ha spiegato come chiudere un app B4XPages... Comunque...
Erel sconsiglia sempre di usare ExitApplication.
B4XPages o no, secondo me il problema rimane sempre il servizio Starter. A volte tento di fermarlo, prima di chiudere un'app (con ExitApplication) e non sempre si ferma.
 

Star-Dust

Expert
Licensed User
Eh ma se hai letto i post preDecenti, lui lancia un'app esterna e ne utilizza i servizi (non intesi come servizi Android) e quando vuole chiudere la propria app vuole disconnettere quell'app dalla VPN e deve farlo in quel modo, usando un Intent ("verso" quell'app).

Erel sconsiglia sempre di usare ExitApplication.
B4XPages o no, secondo me il problema rimane sempre il servizio Starter. A volte tento di fermarlo, prima di chiudere un'app (con ExitApplication) e non sempre si ferma.
No, non ho seguito molto la conversazione.

E' un app esterna o è un intenti di un servizio di tipo activity?

Perchè io mi sono fatto realizzare un wrap della libreria Zoom che è un servizio che apre un activity e quindi quando è chiamato passa in primo piano l'activity del servizio e mi copre la mia......ed è un discorso diverso da richiamare un App esterna.

Per l'uscita c'è un modo che ho descritto all'inizio di questo thread che non è ExitApplication.

Il problema non è il servizio, ma il fatto che richiamando un activity anche solo per un attimo perde il controllo dello schermo che ritorna alla Main (o se l'activity avesse un Layout si vedrebbe quello) per poi ritornare alla sua App e chiudersi...... ma ma ma ..... vabbe tanto a me non interessa la cosa .... passo e chiudo
 

Sabotto

Active Member
Licensed User
Scusami Luca sono stato impegnato. Ho letto ora. Appena posso faccio le prove.
Stardust Erel si concentrava su ExitApplication ecc che non centrano niente col problema. L'effetto lo fa la chiamata StarActivity (intent) che è l'istruzione che eseguo quando voglio chiudere l'app "esterna" (non se se chiamarla servizio o come) OpenVPN.
 

Sabotto

Active Member
Licensed User
secondo me il problema è in StopSophosClient
Mi potrò sbagliare ma se lo toglie secondo me non lo fa più...

Ma se lo tolgo, devo poi chiudere a mano la VPN.

Comunque un ideuzza su come evitarlo forse c'è , visto che questo servizio è dichiarato come un attività..
Comunque mi ritiro dalla conversazione..
No! non ti ritirare, non mi abbandonare :oops:
 

Star-Dust

Expert
Licensed User
Secondo me potresti chiudere prima l'App e poi il servizio vpn cosi non traballerebbe nulla.
MA se l'App è chiusa come fai a chiudere il servizio dopo la chiusura dell'App?

Semplice, richiami un servizio che parte dopo 2 o 3 secondi e chiudi l'App
B4X:
'   Chiama servizio che parte fra 2 secondi
    StartServiceAt(NomeServizio,DateTime.Now+2000,True)
    'Chiusura App
    Dim jo As JavaObject
    jo.InitializeContext
    jo.RunMethod("finishAffinity", Null)
e nel servizio
B4X:
Sub Service_Start (StartingIntent As Intent)
    Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.

    Dim i As Intent
    i.Initialize(i.ACTION_MAIN, "")
    i.SetComponent("de.blinkt.openvpn/.api.DisconnectVPN")
    i.PutExtra("de.blinkt.openvpn.shortcutProfileName", "VPN_Telecontrollo")
    StartActivity(i)
    ToastMessageShow("Disconnessione VPN in corso...",False)
End Sub


io addirittura feci (in senso stretto) un altra cosa nel mio caso. La mia app la trasformai in Floating StandOut (cioè volante con un bottone che stava sopra le altre app) e quindi rimaneva aperta ma non si vedeva più fingendo di essere chiusa e operavo dell'esterno nell'activity.... usando questa libreria, ma è complicato

P.S. Credo che con Android 11 non funzionerebbe perchè il servizio non può aprire App esterne se non attivi Draw On Top
 
Last edited:

Sabotto

Active Member
Licensed User
Con la prova di Luca in pratica dopo la chiamata a StopSophosClient le istruzioni successive non vengono eseguite. Non ho poi l'effetto ma è brutale come chiusura e non mi piace. Potre lasciare tutto come sta (l'effetto è veloce e sono io che mi impunto a risolverlo piu che altro perche non capisco perche il layout venga tolto e rimesso da quel StartActivity, mente quandolo faccio per lo StartSophosClient non fa tale effetto.

@stardust Ok stasera provo anche questo metodo. Grazie
 
Top