Emulazione della comunicazione tra Android e microcontrollore tramite thread o servizi o ... altro?

1

Non sono sicuro di quale sia il modo migliore per le attività seguenti: thread, AsyncTasks, Loopers, servizi? Perché? Ci sono altri candidati?

Ho bisogno di discussioni / Attività / Servizi / altro per:

  • Tracciare i dati, (l'aggiornamento dovrebbe essere fatto dopo una determinata quantità di dati è stato letto)
  • Generazione di dati, (deve essere eseguita durante l'intero runtime dell'applicazione a tempo indeterminato)
  • Lettura dei dati, (come sopra)
  • Salvataggio di dati su scheda SD / esecuzione di alcuni registri
  • Interagire con UX

Scenario più dettagliato Devo emulare le comunicazioni tra un dispositivo esterno e Android. Dispositivo esterno (non ho accesso a quel dispositivo per un po 'di tempo - sto aspettando che arrivi, ecco perché voglio emulare la comunicazione - che è una scheda di sistema di controllo e misura con microprocessore ARM) genera alcuni dati imballati in cornici in formato ASCII. Android ha bisogno di pool? (Forse c'è un modo per dire: "Ehi ho generato dati per te. Prendilo!"? - Se sì, potresti consigliarmi?) Il dispositivo esterno per leggere i dati.

    
posta lixonn 21.01.2014 - 20:32
fonte

2 risposte

0

Diamo un'occhiata alle opzioni:

AsyncTask - Consente di eseguire operazioni in background e pubblicare risultati su un thread dell'interfaccia utente. Progettato per l'utilizzo con qualcosa di breve che deve accadere in background, che una volta completato aggiorna immediatamente l'interfaccia utente.

Loopers - Essenzialmente è un costrutto che ti aiuta a implementare l'elaborazione della coda su un thread. Così, gli altri possono inviare i messaggi di thread che vengono aggiunti a una coda che poi gestisci in modo sequenziale.

Servizi - Essenzialmente un'app che viene eseguita in background e non ha un'interfaccia utente. Una volta avviato, può continuare a funzionare.

Threads - Penso che tu capisca questo. Asyc all'interno della tua app. Muore con la tua app.

Quindi, per rispondere alla tua domanda, una discussione sarà la migliore. Un dispositivo esterno è in esecuzione indipendentemente dal codice dell'applicazione, ma interagisce solo con il telefono mentre l'app è in esecuzione. Quindi, non ha bisogno di essere emulato come servizio (completamente inutile) e non dovrebbe essere fatto come AsyncTask - non stai emulando le interazioni dell'interfaccia utente (presumo). Un Looper può essere utile, ma dipende dall'interazione specifica tra app e dispositivo. La tua descrizione suggerisce che desideri che qualcosa generi in modo indipendente gli eventi gestiti dalla tua applicazione (con traffico potenzialmente bidirezionale tra i due). L'utilizzo di Looper richiede la codifica sia dell'applicazione che del dispositivo esterno come thread separati, quindi utilizzare Loopers su ciascuno per gestire le comunicazioni in coda tra i due.

Quindi, se usi il costrutto del Looper o meno, dovresti comunque emulare il tuo dispositivo esterno in un thread. Inoltre, un Looper introdurrebbe un ulteriore livello di riferimento e astrazione tra la tua app e il dispositivo reale. Sono sicuro che quando lavorerai con il dispositivo attuale, vorresti modificare il codice dell'applicazione il meno possibile. Usando un Looper, avresti bisogno di scrivere un thread che gestisca la comunicazione attraverso il costrutto Looper. Poiché la comunicazione effettiva probabilmente sarà già asincrona o tramite un'altra libreria sincrona (con thread), emulandola come un thread è facile utilizzare la stessa semantica dell'implementazione finale (non sarà necessario aggiungerla a un wrapper Looper o rimuovere quello della tua app e test / debug di un altro livello di interfaccia).

    
risposta data 27.01.2014 - 20:06
fonte
3

Questo può essere ottenuto usando interrupts [1] . Gli interrupt possono essere utilizzati con timer, ingressi digitali e la porta seriale [2] . A seconda della variante di Arduino, alcuni o tutti i pin possono essere utilizzati per gli interrupt .

Per le attività che si verificano regolarmente, utilizzare gli interrupt del timer. Per la porta seriale, utilizzare NewSoftSerial.

1. Interrompiamo questo programma per portare sei un tutorial su ... Arduino interrompe
2. NewSoftSerial

    
risposta data 21.01.2014 - 21:37
fonte

Leggi altre domande sui tag