2017-07-12 1 views
0

Ich habe dieses Problem: Ich habe eine Haupttätigkeit, die an einen Dienst gebunden ist, Auch diese Hauptaktivität kann eine Klasse (AsyncTask) aufrufen, die ein Client ist, der eine Verbindung herstellt Server und wartet auf Daten.wie man einen Dienst und AsyncTask kommunizieren

Ich versuchte, die bind von Klasse (AsyncTask) Client an den Dienst zu machen, aber ich weiß nicht, ob das möglich ist oder muss ich Daten an die Haupttätigkeit zurückkehren so Haupttätigkeit es die schicken Bedienung?

Ich kann dies tun in der Hauptklasse

Intent intent = new Intent(getApplication(), ChatHeadService.class); 
startService(intent); 
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); 

aber wie kann ich es in der Klasse (AsyncTask) Client implementieren?

Antwort

0

Sie können die Daten Ihrer asynchronen Task auf diese Weise zur Hauptaktivität zurückgeben.

protected void onProgressUpdate(Integer... progress) { 
    setProgressPercent(progress[0]); 
} 
protected void onPostExecute(Long result) { 
    showDialog("Downloaded " + result + " bytes"); 
} 

Dann können Sie diese Daten aus Aktivität passieren durch den Aufruf startService(...) und Weitergabe von Daten in einem intent zu bedienen.

Der Aufruf von startService(...) mehrmals ist sicher und startet nicht mehrere Instanzen.

P.S. Das Ausführen eines Servers in Android klingt nicht richtig für mich. Android-Geräte sollten nur als Clients verwendet werden.

+0

vielleicht was ich versuche zu tun ist nicht möglich mit asinc Aufgabe, weil nur onpostexecute zurückgeben kann, was in do im Hintergrund getan wird. Und ich möchte einen Dienst im Hintergrund aufrufen und manipulieren, ohne die asynchrone Aufgabe zu schließen, um den Wert vom Server – tseres

+0

zu erhalten. Was Sie versuchen, kann mit Service – Ryan

+0

erreicht werden, fügte ich den Dienst hinzu und es funktioniert aber Beim Verschieben des Bildes ist ein Fehler aufgetreten: Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren. – tseres

0

Ich denke, dass Sie einfach den Dienst von doInBackground() aufrufen können, wie Sie in der Aktivität können. Eine Lösung für ein ähnliches Problem finden Sie unter this Stack Overflow post.

+0

ich versuche, dem Beispiel zu folgen Intent serviceIntent = new Intent(); serviceIntent.setAction ("services.conServise"); Kontext Kontext = getApplication(); context.startService (serviceIntent); aber Kontext ist nicht anerkannt, vielleicht denke ich brauche die Hauptklasse, damit ich – tseres

+0

@tseres 'MainActivity.class' arbeiten kann? – Cheticamp

+0

lol ich weiß es wirklich nicht, ich bin neu für android. – tseres

Verwandte Themen