2017-03-01 10 views
0

私はAsynctaskを使用して、バックグラウンドで連続的にデータを取得しているソケットを使用しています。AndroidスタジオAsyncTask

私はpublishProgress()onProgressUpdate()にこのデータを送信し、私はこのデータを使用する必要がある場所は、別のクラスであるので、私は、機能onProgressUpdate()からデータを取得したり、別のクラスにそれを送信する方法があるかどうかを知りたいです。少なくとも、これは可能ですか?

私は、.javaファイルを持っているこの.javaファイルでは、私は2つの公共のクラスがあります。

まず一つは、私はソケット情報を取得するために、バックグラウンドでこのAsynctaskを使用するクラスです。

私はOpenGLを使用しているので、私はそのデータを使用する必要があります。

あなたは

+0

バックプロセスが不完全なときにこれを実行したいのですが、そうですか? – Pedo

+0

はい、OpenGlクラスのpublishProgressデータを取得しています – diego

答えて

-1

publishProgress()方法でこれを行うことができ感謝し、あなたがdoInBackground()からこのメソッドを呼び出すことができ、あなたのデータを取得する必要がある場合、このメソッドはいつでも呼び出すことができます。

paramsからデータを取得し、それをAsynctaskのパブリック変数に格納し、別のクラスからアクセスします。

これは問題ありません。

0

確かに可能です。あなたはdoInBackground()onProgressUpdate()の間で渡される配列の型を定義します。進歩を公表し、それをそのまま利用することができます。

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

代わりに、スレッドdIB()を実行していると何のスレッドがそれを消費している間に、パブリッシュ・サブスクライブインタフェースを作成することができます。

ただし、AsyncTaskは長時間実行する操作には使用できません。それは比較的速いワンショットを意味する。 AsyncTaskの他のすべてのインスタンスでデフォルトで使用されている1つのシリアル実行プログラムをブロックしないように、専用の実行プログラムでタスクを実行することを検討する必要があります。たとえば、

executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);