2013-02-05 11 views
11

Ho un servizio in esecuzione nella mia app ..Servizio Android e interfaccia utente Discussione

Questo servizio è un oggetto per l'invio di un messaggio al server e una funzione per ottenere l'oggetto e usarlo.

L'oggetto viene inizializzato dal Servizio eppure quando l'interfaccia utente ottiene questo oggetti e usarlo - sembra che lo utilizza sul thread UI ..

È corretto? C'è un modo per far sì che il mio oggetto venga sempre eseguito dal thread del servizio?

public class ServerMessagesManager extends Service { 
    private ServerMessagesReceiver serverMessageReceiver; 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     this.serverMessageReceiver = new ServerMessagesReceiver(app); 
    } 

    public ServerMessagesReceiver getServerMessagesReceiver() 
    { 
     return serverMessageReceiver; 
    } 
} 
+0

un servizio viene eseguito sul thread ui. dare un'occhiata a intentservice per i servizi che eseguono una parte del processo su un thread separato – njzk2

risposta

23

Uso IntentService invece di Service. Se si effettuano chiamate di rete in uno Service, l'interfaccia utente verrà bloccata. Pertanto, utilizzare IntentService poiché utilizza un numero Thread separato.

E non si sa quando un messaggio del server recupererà i dati. È possibile generare un NullPointerException se si accede agli oggetti purché le chiamate di rete siano ancora in corso. Utilizzare BroadcastReceiver s per attivare un Intent ogni volta che un server risponde.