2012-01-25 17 views
0

コアロジックを実装し、GUIを更新するために、別々のスレッドを作成します。 両方のスレッドは、それらと直接データを共有すべきではありません。このために、私は同期get()とput()メソッドを持つベクトルキューを作成したいと思います。 onClickイベントがGUIスレッドで発生した場合、OnClickイベントを受け取ったことをコアスレッドに通知します。したがって、コアスレッドは何かを実装し、その結果をベクトルに入れます。この時点で、GUIスレッドは受け取った結果を通知され、GUIスレッドはそれを取り出して画面を更新する。 これを行う方法を理解できません。これを実装する方法はありますか?UIとロジック用に別々のスレッド - Android

答えて

0

これは、他のフレームワークや環境と同様に行うことができます。 AndroidのAPIは、あなたが記述したような(AsyncTask、Handler/Thread/Runnableなど)マルチスレッドアプリケーションを扱うための高度な方法を提供しますが、独自の処理キューでこれらをラップすることもできます。私は最近、処理のために論理キューを作成し、キューに何かをプッシュすると、アイテムのキューをチェックし、バックグラウンドスレッドでそれらを処理するメソッドを実行します。ブロードキャストインテントを送信し、アクティビティレベルでIntentFiltersを登録することで(登録を忘れないでください)、またはAndroid UIフレームワークがUIイベントを使用して行う方法と同じ方法で独自のリスナインタフェースを実装することで、処理が完了したときにシステムに通知できます。

AsyncTaskは、バックグラウンドスレッドとメインUIスレッド間の呼び出しを簡単に行います。 onPreExecute、onProgressUpdatedおよびonPostExecuteはすべてUIスレッドで実行され、doInBackgroundは自動的に作成されるバックグラウンドスレッドで実行されます。それよりも簡単には得られません

+0

私はそれのサンプルコードを教えてくれますか?キューを使用しています。 –

+1

"サンプルコード"ほどシンプルではありません。私の実装は、いくつかのクラスと数百行のコードにまたがっています。私はそれを擬似コードで記述し、私がタスクを達成するために使用したフレームワークのオブジェクトを教えてもらえますが、スプーンに公開されているものはあなたの実装をフィードするものではありません。 – Rich

関連する問題