2012-12-27 12 views
9

並列に4つのスレッドを実行しようとしていますが、失敗しています。マルチスレッドはどのようにAndroidで動作しますか?

私は、同期wait()notify()CyclicBarrierThreadPoolExecutorCountDownLatchAsyncTaskや他の多くを使用して試してみましたが、並列にスレッドを実行している管理していませんでした。

4つのスレッドを同時に(つまり、アンドロイドで)同時に実行できますか?どうやって?

注:私はAudioRecordAudioTrack APIを使用してオーディオストリーミングを行っています。

+0

問題点について詳しく説明できますか? – Henry

+0

@Henry一度に4つのスレッドをすべて実行することはできません。これを達成する方法は? –

答えて

13

アンドロイドで同時に4スレッドを実行できますか?

はい、4スレッドを並列に実行できます。スレッドを追加すると、通常は役立ちますが、ある程度後にパフォーマンスが低下します。 4つのスレッドで問題は発生しません。

問題:スレッドスレッドを実行できません。つまり、スレッド1を実行します。 4回、2回3回n 4回のみ1回。それを実行する方法( のスレッドを使用しようとしましたが、すべてのスレッドを並列に実行できませんでした)?

あなたの目標は、すべてのスレッドがアクティブに処理持つように単純であれば、私は(より一般的とExecutors)は、Java thread poolsを見てお勧めします。

アンドロイドサポートマルチスレッディング?はいの場合は、 アンドロイドでマルチスレッドがどのように機能しますか?

はい、Androidはマルチスレッドをサポートしています。それを実現するための最も好ましい方法は、(他のプールとエグゼキュータスレッドより)あなたのスレッドがそのタスクに離れてクランクことができdoInBackground()を、実装することができますAsyncTask

AsyncTascです。これは、Threadから得られる機能に似ています。

onPreExecute()onPostExecute()を両方ともUIスレッドで実行すると、本当の魔法が発生します。これにより、アクティビティが添付されていないというメッセージが表示されなくなります。

このanswerには、あなたに役立つ小さなコード例AsyncTaskが含まれています。また

、私は私の研究中に発見することは、記録の送信と、すべてのオーディオ受信、ということである編集 -アンドロイド

Handlersを見ては非常にインタラクティブpreocessesであり、彼らはシンクやIOリソースを必要とします。可能な限り最良の解決策は、それぞれの操作ごとに別々の非同期タスクを作成することで、それぞれの操作が別々の非同期タスクで実行されるようにすることです。

+0

ありがとうございます。しかし、AsyncTaskを試しているときに、私は多くのオーディオデータを失っています。つまり、AsyncTaskを使用してオーディオ音声データをサーバーに送信しています。その音声データは、独自の送信時刻を使用して送信されます。その時、私はアプリ側の音声データを失うでしょう。 –

+0

私は非同期タスクに問題はありませんでしたが、同時スレッドを使用したい場合でもスレッドプールとエグゼキュータを参照できます。 –

+0

私もそれを試しました..私は40msごとに16Kbのオーディオデータを録音しています。その別のスレッドを並行して実行する時間がかかります。 –

-4

非同期タスクを使用すると、非同期タスクを並行して実行できます。

+0

私はこれを試しました..しかし、それは実行するためにそれ自身の時間がかかります。 Nは私にこれを助けませんでした。私はAsyncTaskで働く多くのオーディオデータを失うでしょう –

+4

@タルニこれはコメントしてください! – swiftBoy

2
  1. あなたは4つの異なるスレッドを実行できますが、並行して(同時に)実行するには、それをサポートする必要があります。単一のコアCPUを使用している場合、実行されるスレッドの順序はスケジューラによって異なり、1つのスレッドのみが実行されます。
  2. 実行の順序とタイミングはスケジューラによって異なります。
  3. はい。あなたはAsyncTaskまたはJavaの両方の機能に頼ることができます(Executors eg)
関連する問題