2017-03-01 2 views
0

Ich benutze Sockets und ich bekomme Daten kontinuierlich im Hintergrund mit Asynctask.Android Studio AsyncTask

Ich sende diese Daten an onProgressUpdate() mit publishProgress() und ich würde gerne wissen, ob es eine Möglichkeit ist, die Daten aus der Funktion onProgressUpdate() oder senden Sie es an eine andere Klasse zu erhalten, da, wo ich diese Daten in einer anderen Klasse ist sie verwenden müssen . Zumindest ist das möglich?

Ich habe eine .java, in diesem .java- I 2 öffentliche Klassen haben:

erste ist eine Klasse, wo ich diese AsyncTask im Hintergrund verwenden Buchse Informationen zu erhalten.

In der zweiten öffentlichen Klasse verwende ich OpenGL und ich muss diese Daten verwenden.

Danke

+0

Sie möchten dies zu der Zeit tun, wenn der Rückprozess unvollständig ist, oder? – Pedo

+0

Ja, publishProgress-Daten in der OpenGl-Klasse erhalten – diego

Antwort

-1

Yo kann dies mit publishProgress() Methode tun, und Sie können diese Methode von doInBackground() und diese Methode aufrufen kann jederzeit aufgerufen werden, wenn Sie Ihre Daten erhalten müssen.

Dann erhalten Daten, was Sie wollen von params und speichern Sie es in öffentlichen Variablen von Asynctask und greifen Sie auf es von einer anderen Klasse.

Dies kann funktionieren.

0

Sicher ist es möglich. Sie definieren den Typ des zwischen doInBackground() und onProgressUpdate() übergebenen Arrays. Sie können den Fortschritt einfach veröffentlichen und auf diese Weise konsumieren.

new AsyncTask<...,MyDataObject,...>() {...}.execute(); 

Alternativ können Sie auch eine Publish-Subscribe-Schnittstelle zwischen dem Thread erstellen dIB() läuft und was auch immer Thread es verbraucht.

Nicht, dass AsyncTask nicht für lang andauernde Operationen verwendet werden soll. Es soll ein relativ schnelles One-Shot sein. Sie müssen Ihre Aufgabe auf einem dedizierten Executor ausführen, um den einen seriellen Executor, der standardmäßig für alle anderen Instanzen von AsyncTask verwendet wird, nicht zu blockieren. ZB

executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);