2013-02-05 19 views
11

Ich habe einen Dienst in meiner app läuft ..Android-Service und UI-Thread

Dieser Service hat eine Aufgabe, für die an den Server und eine Funktion Senden der Nachricht, das Objekt zu erhalten und zu nutzen.

wird das Objekt aus dem Dienst initialisiert und doch, wenn die Benutzeroberfläche wird diese Objekte und verwendet - es sieht aus wie es auf dem UI-Thread verwendet ..

Ist das richtig? Gibt es eine Möglichkeit, dass mein Objekt immer vom Service-Thread ausgeführt wird?

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

ein Dienst wird auf dem ui-Thread ausgeführt. Werfen Sie einen Blick auf Intentservice für Dienste, die einen Teil des Prozesses in einem getrennten Thread ausführen – njzk2

Antwort

23

Verwenden IntentService statt Service. Wenn Sie Netzwerkanrufe in einem Service ausführen, wird die Benutzeroberfläche festhängen. Verwenden Sie daher eine IntentService, da es eine separate Thread verwendet.

Und Sie wissen nicht, wann eine Servernachricht die Daten abrufen wird. Ein NullPointerException kann ausgelöst werden, wenn auf Objekte zugegriffen wird, solange noch Netzwerkaufrufe ausgeführt werden. Verwenden Sie BroadcastReceiver s, um eine Intent abzufeuern, wenn ein Server antwortet.

Verwandte Themen