2013-02-05 19 views
11

Mam Usługa działa w moim app ..Usługa Android i wątku UI

Usługa ta ma obiektu do wysyłania wiadomości do serwera i funkcji, aby uzyskać ten obiekt i użyć go.

Obiekt jest inicjowany z Serwisu, a jednak gdy UI dostaje ten przedmioty i używać go - wygląda na to, że używa go na UI wątek ..

Czy jest to prawidłowe? Czy istnieje sposób, aby mój obiekt był zawsze uruchamiany z wątku serwisowego?

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

usługa działa w wątku interfejsu użytkownika. spójrz na intentservice dla usług, które uruchamiają część procesu w oddzielnym wątku – njzk2

Odpowiedz

23

Zastosowanie IntentService zamiast Service. Jeśli wykonasz połączenia sieciowe w telefonie Service, interfejs użytkownika utknie. Dlatego używaj IntentService, ponieważ używa oddzielnego Thread.

I nie wiesz, kiedy wiadomość serwera będzie pobierać dane. Jeśli dostęp do obiektów jest możliwy, tak długo, jak długo trwają rozmowy sieciowe, może zostać wygenerowany NullPointerException. Użyj BroadcastReceiver s, aby wystrzelić Intent, gdy serwer odpowie.

Powiązane problemy