Italian Effetto brutto alla chiusura di un'app

LucaMs

Expert
Licensed User
Longtime User
Ok scoperto. Se se non metti la sub tra le parentesi non effettua nessun Ritorno. Comunque funziona anche su B4J
Ora provo B4I
Ecco, appunto. In pratica se la scrivi come facEVO...
B4X:
Wait For(Qualcosa) Complete(Unused As Boolean)
oppure:
B4X:
Wait For(Qualcosa) Complete ' ---> eliminata (Unused As Boolean)
funziona perfettamente, per cui da oggi posso evitare quella "forma".
 

Star-Dust

Expert
Licensed User
Longtime User

LucaMs

Expert
Licensed User
Longtime User
In B4i non funziona
Non posso provare, non ce l'ho.
Ti allego la prova che ho fatto. Non è fatta bene perché inizialmente volevo usare solo B4A, quindi un paio di moduli stanno nella cartella specifica di questo linguaggio, anziché stare nella directory "padre" (ma sai bene come importarli, tanto). [è robaccia che uso solo per prove, ovviamente]
 

Attachments

  • Project.zip
    24.7 KB · Views: 131

Star-Dust

Expert
Licensed User
Longtime User

Comunque non c'entra (o centra) con il problema della chiusura.
 

udg

Expert
Licensed User
Longtime User
Scorrevo i messaggi e ho trovato le vostre prove.
Vi ricordate che se non vi interessa il valore di ritorno di una ResumableSub basta fare "Return Null" (e come parametro avere Object)?
Qualcosa del genere:
B4X:
Wait for (miasub) complete(result as object
..
sub miasub as resumablesub
...
return null
end sub
 

LucaMs

Expert
Licensed User
Longtime User
Scorrevo i messaggi e ho trovato le vostre prove.
Vi ricordate che se non vi interessa il valore di ritorno di una ResumableSub basta fare "Return Null" (e come parametro avere Object)?
Qualcosa del genere:
B4X:
Wait for (miasub) complete(result as object
..
sub miasub as resumablesub
...
return null
end sub
Non hai scorso bene tutto, hehehe.

Certo, può funzionare anche in quel modo, ma va bene qualunque tipo di variabile e di valore assegnatogli. Adesso, oltretutto, non metto nemmeno la parte dopo il "Complete", così risolvo pure meglio.
 

udg

Expert
Licensed User
Longtime User
Avevo letto degli esperimenti e dei risultati, ma io preferisco seguire la via maestra.
Aggiorno solo se davvero indispensabile, leggo la documentazione e seguo gli esempi. Di sperimentare non ne ho voglia, però sono sempre grato a chi lo fa perché solo così si avanza e si scoprono eventuali bug o problemi.
 

Star-Dust

Expert
Licensed User
Longtime User
Anche io preferisco la maestra
 
  • Haha
Reactions: udg

Sabotto

Active Member
Licensed User
Lieto di aver dato spunto ad una nuova discussione ( il fermarsi alla parola Complete l'ho scoperto anche io da poco vedendo il codice di qualcuno sul forum inglese), ma....rimane il problema che quel "esce/entra" del layout si verifica solo quando chiamo quel metodo StopSophosClient presente nella classe e credo non centri niente nemmeno il Wait for (devo provare domani) ma forse, come diceva @LucaMs, è l'Intent che creo per chiudere il servizio (è una VPN).
Non centra nemmeno l'altra pagina perche ho provato a toglierla e a non usarla, e l'effetto si verifica sempre.
Ci vorrebbe un metodo come esiste in VBA per Excel, che sospende la visualizzazione per evitare aggiiornamenti dello schermo (ad esempio quando si spostano/inseriscono/cancellano righe, colonne, celle..) Mi pare fosse Application.ScreenUpdating = False
 

Star-Dust

Expert
Licensed User
Longtime User
Sono daccordo con LucaMs.

E comunque aveva ragione, come sempre (o quasi), il COMPLETE senza parametri non è corretto.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Convintissimo che si potesse scrivere una resumable senza return.
In effetti, una resumable non è altro che una normale routine che contenga almeno uno Sleep o un Wait For (viene "segnata" come tale automaticamente) e non è obbligatorio che restituisca un valore; lo è solo nel caso in cui tu voglia attendere il suo completamento prima di proseguire con l'esecuzione del codice che segue la chiamata a quella routine.

Diventa obbligatorio anche se nella sua "signature" scrivi anche la parola chiave "Complete" - che appunto indica che attendi che venga completata.
Il "bug" è che se appunto scrivi anche il "Complete", l'IDE e il compilatore non dovrebbero accettarlo senza che questa sia seguita dal parametro di ritorno.
 

Sabotto

Active Member
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..
 
Last edited:

LucaMs

Expert
Licensed User
Longtime 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..
Il parecchio meno esperto sottoscritto nemmeno ha capito bene come funzioni la tua app, perché venga usato un intent, etc.
E' che non conosciamo quella libreria che usi.

Ad esempio, cos'è:
"VPN_Telecontrollo"
?
 

Sabotto

Active Member
Licensed User
Allora Luca innanzitutto grazie. Cerco di spiegarti.
La mia app effettua una specie di PING a degli indirizzi IP che sono in una VPN (immagino che tu sappia cos'è, una rete virtuale privata)
Per accedere a questa VPN c'è sullo smartphone una apposita app (OpenVPN). Questa app si puo avviare come una normale app tappando la sua icona, chiede qyale file di configurazione usare ("VPN_Telecontrollo", è un file di testo) dove sono memorizzate utente e password, e rimane in background.
Questa operazione io la faccio fare direttamente dalla mia app, vale a dire: lancio l'app OpenVPN (con la routine StartSophosClient, poi posso fare i miei ping a vari indirizzi della VPN e poui, quando ho terminato, è inutile che tenga ancora in background la app esterna OpenVPN, per cui la chiudo (con la sub StopSophosClient) sempre dall'interno della mia app (potrei farlo anche da fuori con lo slide del dito dall'alto in basso, mi appare l'app OpenVPn e io la chiudo), ma preferisco fare tutto dall'interno della mia app.
Non so se sono stato chiaro

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)

Il Log l'ho creato ma non mi dice nulla di particolare se vuoi te lo mando
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Allora Luca innanzitutto grazie. Cerco di spiegarti.
La mia app effettua una specie di PING a degli indirizzi IP che sono in una VPN (immagino che tu sappia cos'è, una rete virtuale privata)
Per accedere a questa VPN c'è sullo smartphone una apposita app (OpenVPN). Questa app si puo avviare come una normale app tappando la sua icona, chiede qyale file di configurazione usare ("VPN_Telecontrollo", è un file di testo) dove sono memorizzate utente e password, e rimane in background.
Questa operazione io la faccio fare direttamente dalla mia app, vale a dire: lancio l'app OpenVPN (con la routine StartSophosClient, poi posso fare i miei ping a vari indirizzi della VPN e poui, quando ho terminato, è inutile che tenga ancora in background la app esterna OpenVPN, per cui la chiudo (con la sub StopSophosClient) sempre dall'interno della mia app (potrei farlo anche da fuori con lo slide del dito dall'alto in basso, mi appare l'app OpenVPn e io la chiudo), ma preferisco fare tutto dall'interno della mia app.
Non so se sono stato chiaro
Chiarissimo.
Ora che lo so, cerco di guardare di nuovo la faccenda :)
 
Top