2010-11-06 15 views
6

Sto sviluppando un'app di gioco multi-player per l'androide. Uno dei partecipanti agisce come host (colui che ha creato l'istanza di gioco) e ciascuno degli altri partecipanti si connette all'host utilizzando bluetooth.Mantenere i thread e lo stato della connessione nell'app per Android utilizzando onSaveInstanceState?

La mia domanda è la seguente: questo host ha alcuni thread in esecuzione per comunicare e contiene tutte le connessioni aperte. Ho letto che le mie attività possono essere distrutte temporaneamente e ripristinate in seguito e dovrei usare il meccanismo onSaveInstanceState per quello. Tuttavia, sto parlando di un'applicazione che funge da "server" per il gioco e ha connessioni aperte e thread che servono gli altri client, cosa succede a queste connessioni e thread se il sistema operativo sta decidendo di distruggere la mia attività? Sono terminati? In tal caso, quale sarebbe lo schema consigliato per implementarlo correttamente, come posso mantenere una connessione sul pacchetto onSaveInstanceState? non è serializzabile Lo stesso vale per i thread, ho bisogno di ricrearli e distruggerli dopo la distruzione e quando l'attività viene ripristinata ?? se tengo tutto questo stato in qualche classe statica che rappresenta lo stato del gioco? Se lo faccio, il sistema operativo non distruggerà i miei thread/connessioni?

Ho esaminato la chat Bluetooth di esempio fornita con SDK e I, quindi non c'è alcuna gestione di onSaveInstanceState, quindi non è molto chiaro cosa dovrei fare.

Grazie!

risposta

7

cosa succede a queste connessioni e thread se il sistema operativo sta decidendo di distruggere la mia attività?

Se hai creato quei fili in un'attività, è meglio fermarli, altrimenti li perderai.

Come posso mantenere una connessione sul pacchetto onSaveInstanceState?

Non è possibile.

Lo stesso vale per i thread, devo ricreare e distruggere su distruggere e quando l'attività viene ripristinata?

Se sono stati avviati dall'attività, quindi, sì, per favore.

se tengo tutto questo stato in una classe statica che rappresenta lo stato del gioco? Se lo faccio, il sistema operativo non distruggerà i miei thread/connessioni?

Inserire la logica del server (thread, connessioni, logica di gioco lato server) in un servizio Android. Si prega di utilizzare startForeground() per mantenere attivo il servizio, inserendo un Notification nella barra di stato lungo il percorso in modo che l'utente abbia un modo semplice per tornare all'attività che consente loro di interrompere il servizio.

+0

Grazie. Vediamo se riesco a farti diventare etero da quando sono nuovo nello sviluppo di Android. Dovrei avere una classe di servizio nella mia app che si occupa delle connessioni e dei thread in background che comunicano con gli altri e gestiscono il gioco. Fondamentalmente ogni volta che si dispone di un'applicazione che utilizza il bluetooth per comunicare con un'altra applicazione, è necessario avere una classe di servizio nella propria app altrimenti questa connessione andrà persa se l'attività viene distrutta? O c'è un altro modo per mantenere la connessione? Se non ce n'è, il campione della chat Bluetooth è molto fuorviante. – Eitan

+0

@Eitan: "Fondamentalmente ogni volta che si ha un'applicazione che utilizza il bluetooth per comunicare con un'altra applicazione, è necessario disporre di una classe di servizio nella propria app altrimenti questa connessione andrà persa se l'attività viene distrutta?" - Non riesco a parlare in modo specifico con Bluetooth. Tuttavia, in generale, vuoi che la tua attività pulisca tutto quando viene distrutta. In caso contrario, i tuoi utenti ti assegneranno valutazioni di una stella sul mercato per spreco di CPU, batteria, ecc. – CommonsWare

+0

@Eitan: "Se non ce ne sono, il campione della chat Bluetooth è molto fuorviante." - Intendi questo? http://developer.android.com/resources/samples/BluetoothChat/index.html L'esempio che mostra l'utilizzo di un servizio per mantenere il tuo 'BluetoothSocket'? – CommonsWare

Problemi correlati