Italian Start Service??

MAX_SV

Active Member
Licensed User
Longtime User
Ultimamente vi stresso ...
Ho realizzato un app che utilizza il tablet per trasmettere dei tempi da via web attingendo i dati da dei cronometri collegati tramite seriale, il problema è che quando schermo si spegne logicamente il programma viene congelato fino alla successiva riattivazione.
Al momento ho bypassato il problema impedendo lo standby della periferica ma l'autonomia viene decisamente diminuita leggendo sul forum mi sembra di aver capito di dover utilizzare uno start service per permettere il funzionamento in background ... ma come funziona ?
Se volessi che l'app result sia attiva in background cosa devo specificare??

Grazie e scusate se la domanda è banale.
 

androidappl

Active Member
Licensed User
Longtime User
Ultimamente vi stresso ...
Ho realizzato un app che utilizza il tablet per trasmettere dei tempi da via web attingendo i dati da dei cronometri collegati tramite seriale, il problema è che quando schermo si spegne logicamente il programma viene congelato fino alla successiva riattivazione.
Al momento ho bypassato il problema impedendo lo standby della periferica ma l'autonomia viene decisamente diminuita leggendo sul forum mi sembra di aver capito di dover utilizzare uno start service per permettere il funzionamento in background ... ma come funziona ?
Se volessi che l'app result sia attiva in background cosa devo specificare??

Grazie e scusate se la domanda è banale.

Praticamente imposti lo startservice ogni 10 minuti, ogni ecc..
diciamo lo fai col tempo oppure usi lo stick che lo tiene sempre attivo ma con meno priorità, se non ricordo male.
Dipende dalla situazione
 

MAX_SV

Active Member
Licensed User
Longtime User
Praticamente imposti lo startservice ogni 10 minuti, ogni ecc..
diciamo lo fai col tempo oppure usi lo stick che lo tiene sempre attivo ma con meno priorità, se non ricordo male.
Dipende dalla situazione
grazie
interrogo i il cronometro ogni 4 secondi ... tramite timer interno al programma
cosa mi consigli e come? mi puoi fare un esempio di codice
 

androidappl

Active Member
Licensed User
Longtime User
grazie
interrogo i il cronometro ogni 4 secondi ... tramite timer interno al programma
cosa mi consigli e come? mi puoi fare un esempio di codice

Ecco un pò di sintassi:

B4X:
StartService(Nome_Servizio) ' Fa partire il servizio

StopService (Nome_Servizio)' Distrugge il servizio

StartServiceAt("", DateTime.now + 10 * 1000, True) ' esegue il servizio ogni tot ' dovrebbe essere ogni  10 secondi

CancelScheduledService (Nome_servizio) 'Cancella la schedulazione

quindi nel tuo caso:

B4X:
StartServiceAt("", DateTime.now +  2000, True)

Praticamente rilancia il tuo servizio tra 2 secondi. Lo metti in un ciclo e hai risolto....
 

MAX_SV

Active Member
Licensed User
Longtime User
grazie a tutti provo
 

MAX_SV

Active Member
Licensed User
Longtime User
StartServiceAt("", DateTime.now + 2000, True)

quindi ho inserito il codice nell' evento
B4X:
Sub Activity_Pause (UserClosed As Boolean)
    'onscreen.releasekeepalive  ' Impedisce di spegnere schermo
    StartServiceAt("",DateTime.now +  2000, True)
End Sub

ma niente ... purtroppo provengo .net e non ho ancora ben chiaro quando si "scatenano" gli eventi :(
 

Straker

Active Member
Licensed User
Longtime User
Nella tua Activity fai partire il servizio quando ti serve (anche nella Start) con una chiamata a StartService (senza At, così ti parte subito).
Nel servizio, in Service_Start esegui un StartServiceAt.
In questo modo fai partire il servizio (StartService) e quando il servizio parte, si 'programma' per ripartire dopo DateTime.now + ..... ticks.

Domanda... perché hai deciso di far partire il servizio quando l'activity va in pausa?

Dovresti immaginare il servizio come un 'fornitore di dati' sempre attivo. Ovvero le tue routine seriali dovrebbero essere controllate dal servizio, il quale continua a pescare dati. Poi, se la activity è attiva (cioè in foreground, ovvero nomeactivity.IsPaused è False) allora puoi mandare i dati direttamente all'activity (cioè se Main è il nome dell'activity puoi fare Main.NomeLabel = ...., o chiamare una syb presente nell'activity).

Se invece l'activity è in pausa (ad esempio hai fatto un activity.finish) allora con quei dati puoi fare qualcosa'altro...
Oppure puoi controllare che se l'activity è attiva, allora leggi i dati e visualizzi, altrimenti non fai niente tanto non c'è nessuno che guarda i dati. Oppure li salvi per dopo...
 

MAX_SV

Active Member
Licensed User
Longtime User
Domanda... perché hai deciso di far partire il servizio quando l'activity va in pausa?
credevo di dover attivarlo quando l'app entra in pausa

adesso provo grazie
 

Straker

Active Member
Licensed User
Longtime User
Un'ultima cosa. Tecniocamente un servizio che si attiva ogni due secondi è sconsigliato (mangia risorse). Sarebbe meglio un timer dentro un servizio,
Inoltre tieni in considerazione che il sistema operativo potrebbe decidere di rallentare o uccidere il servizio.
Se per te è importante mantenere un certo timing e rimanere sempre in vita, vedi come funziano uno Sticky service.
 

MAX_SV

Active Member
Licensed User
Longtime User
Un'ultima cosa. Tecniocamente un servizio che si attiva ogni due secondi è sconsigliato (mangia risorse). Sarebbe meglio un timer dentro un servizio,
Inoltre tieni in considerazione che il sistema operativo potrebbe decidere di rallentare o uccidere il servizio.
Se per te è importante mantenere un certo timing e rimanere sempre in vita, vedi come funziano uno Sticky service.


il programma trasmette in real time i dati ricevuti dalle postazioni remote per permettere l'elaborazione delle classifiche quindi vero come mi suggerisci lo sticky service
 

Straker

Active Member
Licensed User
Longtime User
Mmmm... con Android non ce la fai.
Suppongo tu sia un cronometrista. Per manifestazioni serie (Coppa del mondo o robe simili) un sistema non certificato Alge o simili non te lo passano.
Se è per roba amatoriale può anche andare bene.
Prevedi comunque un sistema di backup... che succede se non ricevi più i dati perché Android si impalla?
 

Straker

Active Member
Licensed User
Longtime User
Se spieghi in breve il tuo progetto forse posso darti una mano...
 

MAX_SV

Active Member
Licensed User
Longtime User
Non lo uso come cronometro leggo dati da apparecchiature certificate mi serve solo come ponte per inviare i dati al centro classifica quindi da questo punto di vista no problem (in quanto la certificazione riguarda solamente strumenti di misura e cellule o trasponder).
in brevissimo:
  1. leggo dati da seriale
  2. trasferisco su web compilando un web form
  3. nel caso la connessione sia bassa opto per l'invio di sms
il timer non deve essere precisissimo in teoria avrò un tempo ogni 60 secondi (inizio prova) e più o meno lo stesso intervallo (fine prova) considera il tempo impiegato in media dura almeno 5/6 minuti

ogni tempo trasferito viene segnalato sul cronometro nel caso non funzionasse interviene l'operatore (eventuale sblocco / reset)

grazie per la dis
 
Top