Italian Come chiudere un app con b4xpage

giada

Member
Salve,
ho un progetto creato con una b4xmainpages, cosa devo chiamare x chiudere l'app? cos'è il corrispondente di activity.finish?
grazie
 

LucaMs

Expert
Licensed User
Longtime User
Salve,
ho un progetto creato con una b4xmainpages, cosa devo chiamare x chiudere l'app? cos'è il corrispondente di activity.finish?
grazie
Nel progetto B4A... Actvity.Finish :) (nell'Activity Main).
Nel progetto B4J, MainForm.Close.
Nel progetto B4I... non lo so perché non ho B4I.

Ovviamente solo nei progetti che sviluppi effettivamente.
 

giada

Member
io ho sviluppato un progetto con b4xPages e dall'esempio dice di non toccare il main ... e poi ho provato a definire nel main una sub che richiamava activity.finish ma dal codice della b4xmainpage non lo riesco a richiamare...non so se mi sono spiegata
Ora ho trovato un posto di Erel che dice di usare B4XPages.ClosePage(Me), sto provando ma dopo averlo fatto ho sempre un resume...boh
 

LucaMs

Expert
Licensed User
Longtime User
Erel ha sempre detto di non chiudere le app Android, prima ancora della nascita delle B4XPages.
Il punto è che a volte può essere necessario e, quindi, nessun problema nel chiamare una routine che si trovi nell'Activity Main, tramite una CallSubDelayed, che contenga Activity.Finish.
In una mia app io ho questa routine nell'Activity Main:
B4X:
Public Sub CloseApp
    Activity.Finish
    ExitApplication
End Sub
e la chiamo in questo modo:
B4X:
CallSubDelayed(Main, "CloseApp")
dall'interno di una B4XPage in cui rilevo un fatto che mi obbliga a chiuderla.

Funziona senza problemi.
 

giada

Member
ok grazie, ho provato anche la tua soluzione e funziona, ho ancora un dubbio: è giusto chiamare ExitApplication o no? (mi sembra di aver visto che è deprecato..)
Perchè avevo provato a chiamare ExitApplication direttamente dal mio button nella b4xmainpage e funziona però non so se è corretto...
 

amorosik

Expert
Licensed User
Erel ha sempre detto di non chiudere le app Android, prima ancora della nascita delle B4XPages.
Il punto è che a volte può essere necessario e, quindi, nessun problema nel chiamare una routine che si trovi nell'Activity Main, tramite una CallSubDelayed, che contenga Activity.Finish.
In una mia app io ho questa routine nell'Activity Main:
B4X:
Public Sub CloseApp
    Activity.Finish
    ExitApplication
End Sub
e la chiamo in questo modo:
B4X:
CallSubDelayed(Main, "CloseApp")
dall'interno di una B4XPage in cui rilevo un fatto che mi obbliga a chiuderla.

Funziona senza problemi.

Chissa' cosa succede se si mette questa routine su un'app, che oltre a Main ed activity abbia anche dei servizi (ad esempio un service che riceve sms)
Android lo riavvia oppure comanda l'ExitApplication e quindi non riparte ?
 

LucaMs

Expert
Licensed User
Longtime User
Chissa' cosa succede se si mette questa routine su un'app, che oltre a Main ed activity abbia anche dei servizi (ad esempio un service che riceve sms)
Android lo riavvia oppure comanda l'ExitApplication e quindi non riparte ?
Figurati, è difficile far sopravvivere i servizi 😄
Una volta ucciso il processo (e con ExitApplication lo accoppi) nessun servizio dell'app sarà attivo.

L'unico modo per resuscitarlo, se è questo che ti interessa, è usare le notifiche Firebase (forse!).
 

amorosik

Expert
Licensed User
Bon, allora, giurto per capire come funziona
Supponiamo di avere un'app con modulo Main, activity con dati configurazione, e service che riceve notifiche via Firebase
Nel main ci metto la tua routine per la chiusura app
Dici che il service risponde ancora dopo aver chiuso l'app con l'ExitApplication ?
 

LucaMs

Expert
Licensed User
Longtime User
Bon, allora, giurto per capire come funziona
Supponiamo di avere un'app con modulo Main, activity con dati configurazione, e service che riceve notifiche via Firebase
Nel main ci metto la tua routine per la chiusura app
Dici che il service risponde ancora dopo aver chiuso l'app con l'ExitApplication ?
è usare le notifiche Firebase (forse!).
Forse. Mi pare di sì, comunque, al 99%.
 
Top