Ho visto il tutorial di Erel, ma non sono bravissimo con l'inglese e mi perdo un po'
Insomma non ho capito ancora che vantaggi avrei praticamente
Traduzione di [B4X] [B4XPages] What exactly does it solve? - [B4X] [B4XPages] Cosa risolve esattamente?
Come spiegato nel
tutorial B4XPages, gli scopi delle B4XPages sono due:
1 - fornire uno strato (livello superiore) che sia multipiattaforma;
2 - semplificare lo sviluppo di app B4A.
I vantaggi dello "strato multipiattaforma" sono evidenti: B4XPages nasconde molte delle differenze tra le Activity B4A, le Page B4i e i moduli B4J. Con B4XPages è banale creare una "app a pagine multiple" in cui tutto il codice sia condiviso (tranne il codice del modello che viene semplicemente incollato nel modulo principale).
Con le Activity, richiederebbe la creazione di un'Activity + classe condivisa + pagina / modulo per ogni pagina. Parecchio lavoro.
Le tre cose più importanti riguardanti le classi B4XPage sono:
1 - Le classi B4XPages sono normali classi al 100%. Non hanno un ciclo di vita speciale e puoi usarle come vuoi. Ci sono alcuni eventi specifici B4XPages ma non influenzano lo stato della classe stessa. Questo non succede con le Activity.
2 - Le classi B4XPages non vengono mai messe in pausa. Non succede
alcunché di speciale quando una pagina non è più visibile o quando l'app passa in background. Ovviamente il sistema operativo continuerà a poter chiudere l'intero processo (l'app) quando l'app stesse in background (a lungo e in caso di necessità da parte del S.O., come scarsità di memoria, ad esempio).
3 - Le classi B4XPages non vengono mai distrutte (singolarmente). Le variabili globali della classe e lo stato delle View non verranno mai resettati (fintanto che il processo sopravvive).
I 3 punti sopra rendono molte cose semplici. Alcune sono:
- Gli eventi non vengono mai persi né accodati.
- I comandi Sleep non vengono mai annullati. Ad esempio, non è più necessario riavviare le animazioni in Activity_Resume.
- Lo stato dell'interfaccia utente viene mantenuto per tutta la durata del processo.
- Nella maggior parte dei casi non è necessario utilizzare il servizio Starter.
- Possiamo chiamare direttamente metodi pubblici di altre pagine. Non è necessario utilizzare CallSub o CallSubDelayed.
- Possiamo accedere direttamente alle variabili globali pubbliche di altre pagine.
- Possiamo accedere direttamente e manipolare le View di altre pagine.
- Possiamo decidere se creare i layout immediatamente quando viene creata una pagina (B4XPages.AddPageAndCreate).
- Possiamo spostare le View tra le pagine.
- Non c'è bisogno di preoccuparsi dei casi in cui CallSubDelayed avvii l'Activity precedente in modo imprevisto (di solito accade con HttpJobs).
- Possiamo usare la stessa classe di pagina per creare molte istanze di pagina.
- Un unico posto con un unico e semplice comportamento per le variabili globali.
- Non c'è bisogno di pensare a cosa dovrebbe essere inizializzato quando FirstTime sia True e cosa, invece, debba essere inizializzato ogni volta.
- Non è necessario gestire i casi in cui venga avviata per prima un'Activity che non sia la Main.
- Migliore controllo sullo stack (pila) delle pagine poiché è implementato nel codice B4X.
- Gestione automatica del "indicatore di salita" (pagina precedente). Non è necessario utilizzare la libreria AppCompat per questo.
- Modo molto semplice e flessibile per gestire il Back Key - tasto indietro.
- Eventi Background e Foreground che vengono generati in tutte le pagine quando l'app vada in background e in foreground (non così semplice da ottenere con le Activity e necessario in molti casi).
- Nessuna distinzione tra classi contenenti il "contesto di attività" (context) che devono essere dichiarate in Globals ed altre classi che possono essere dichiarate in Process_Global.
- Non è necessario suddividere l'implementazione tra un livello dell'interfaccia utente senza stato e un livello non dell'interfaccia utente con stato.
Detto questo, nessuno è costretto a passare a B4XPages. Tutto continuerà a funzionare esattamente come prima. È troppo presto per affrettarsi e convertire grandi progetti già funzionanti.