Italian Starter Service

IlCasti

Active Member
Licensed User
Longtime User
Dalla guida e dal tutorial di Erel non mi è molto chiaro l'utilizzo del modulo Starter Service..
Qualcuno, potrebbe e sarebbe così gentile da spiegarmelo?

Grazie
 

Emme Developer

Well-Known Member
Licensed User
Longtime User
Lo starter service, se presente nel progetto, è un servizio che viene lanciato sempre prima dell'avvio della prima activity (Main).Quindi è buona norma e procedura, utilizzandolo con moderatezza e senza appesantirlo, dichiarare e inizializzare all'interno di questo tutte le risorse che servono all'applicazione (ad esempio gli oggetti SQL), creazione delle cartelle, le map e i tipi, e quanto altro
 

IlCasti

Active Member
Licensed User
Longtime User
Lo starter service, se presente nel progetto, è un servizio che viene lanciato sempre prima dell'avvio della prima activity (Main).Quindi è buona norma e procedura, utilizzandolo con moderatezza e senza appesantirlo, dichiarare e inizializzare all'interno di questo tutte le risorse che servono all'applicazione (ad esempio gli oggetti SQL), creazione delle cartelle, le map e i tipi, e quanto altro

Quindi diciamo che sostanzialmente qui
B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim Db As SQL
    
End Sub
dichiaro le mie variabile che richiamo ovunque
e qui
B4X:
Sub Service_Create
    'This is the program entry point.
    'This is a good place to load resources that are not specific to a single activity.
    Db.Initialize(File.DirDefaultExternal,"PROVA",True)
End Sub
le inizializzo... giusto?
Al di là di tutto mi pare di aver capito che fin quando il SO non killa l'app, queste rimangono sempre "vive" e non si bruciano come nel caso un utente possa switchare da un app ad un'altra e perdersi per strada "delle informazioni"... corretto?

Immagino che si possa fare anche altro...

Tipo.. poniamo il caso che io debba verificare la connessione ad internet di un dispositivo.. posso passare dallo starter?
Un utente potrebbe mettere in background l'app e ritornarci e non avere linea.. come potrei fare per riverificare ciò?
Richiamo lo starter quando l'app riprende dal resume oppure dall'activity resume devo richiamare la sub sullo starter che la verifica?
Questo non mi è molto chiaro...
 

Star-Dust

Expert
Licensed User
Longtime User
Il Servizio Starter server perché ha un unico accesso all'App, sia che sia il primo avvio che un resume o qualunque altro modo, la prima cosa che carica é il Servizio Starter. Quindi diventa l'unico punto di accesso all'App.

Li si possono dichiarare e inizializzare Variabili che serviranno a tutte le Activity senza il rischio che entri da un punto inaspettato e qualcosa risulti non inizializzato.

Il servizio termina non rimane in funzione, anzi é meglio che non contenga procedure o timer che lo fanno rimanere attivo perché altrimenti hai problemi. Ad esempio se tu hai un Widget o un servizio in background non dev'essere lo starter.
Ma dallo starter puoi attivare altri servizi in background.
Le variabili rimangono in essere anche se il servizio si conclude.

Se l'app viene killata e la fai ripartire, riparte da Starter, ma starter non rimane attivo se l'App é Killata dal sistema.
 

IlCasti

Active Member
Licensed User
Longtime User
Il Servizio Starter server perché ha un unico accesso all'App, sia che sia il primo avvio che un resume o qualunque altro modo, la prima cosa che carica é il Servizio Starter. Quindi diventa l'unico punto di accesso all'App.

Li si possono dichiarare e inizializzare Variabili che serviranno a tutte le Activity senza il rischio che entri da un punto inaspettato e qualcosa risulti non inizializzato.

Il servizio termina non rimane in funzione, anzi é meglio che non contenga procedure o timer che lo fanno rimanere attivo perché altrimenti hai problemi. Ad esempio se tu hai un Widget o un servizio in background non dev'essere lo starter.
Ma dallo starter puoi attivare altri servizi in background.
Le variabili rimangono in essere anche se il servizio si conclude.

Se l'app viene killata e la fai ripartire, riparte da Starter, ma starter non rimane attivo se l'App é Killata dal sistema.

Mmm ok per il fatto che diventa un punto di riferimento per l'app.
Ma quindi serve solo a questo scopo?

Li si possono dichiarare e inizializzare Variabili che serviranno a tutte le Activity senza il rischio che entri da un punto inaspettato e qualcosa risulti non inizializzato.

Corretto?

Oltre alle sub predefinite se ne possono creare altre al suo interno o si possono utilizzare, implementando per i propri scopi, solo quelle esistenti?

Grazie mille!
 

Star-Dust

Expert
Licensed User
Longtime User
Mmm ok per il fatto che diventa un punto di riferimento per l'app.
Ma quindi serve solo a questo scopo?
Li si possono dichiarare e inizializzare Variabili che serviranno a tutte le Activity senza il rischio che entri da un punto inaspettato e qualcosa risulti non inizializzato.
Qui trovi la spiegazione: https://www.b4x.com/android/forum/threads/starter-service-consistent-single-entry-point.57599/#content
Te ne traduco un pezzo:
Una delle sfide che gli sviluppatori di qualsiasi app Android non piccola devono affrontare sono i molteplici possibili punti di ingresso.
Tutto sembra funzionare bene durante lo sviluppo. Tuttavia l'app "stranamente" si blocca di volta in volta sul dispositivo dell'utente finale.
Il motivo di tali arresti anomali è che il sistema operativo può avviare il processo da un'attività o un servizio diverso. Ad esempio se si utilizza StartServiceAt e il sistema operativo uccide il processo mentre è in background.
Ora l'oggetto SQL e le altre risorse non saranno inizializzati.


Oltre alle sub predefinite se ne possono creare altre al suo interno o si possono utilizzare, implementando per i propri scopi, solo quelle esistenti?
Come spiegato prima puoi aggiungere tutte le procedure e sub che vuoi, ma preferibilmente nulla che debba continuare a girare come servizio in background.
Ad esempio se vuoi un Servizio che ogni 2 minuti controlli su internet le previsioni meteo, se sono disponibili aggiornamenti di un app o di un file o qualunque altra cosa... è meglio aprire un altro servizio per una cosa del genere.
 
Top