2011-01-28 6 views
9

私は、特定のイベントのためにサービスによって開始される可能性のあるサービスとアクティビティで構成されるアプリケーションを持っています。このサービスでは、AudioRecord & AudioTrackクラスを使用して、&を作成することができます。この時点で、アプリケーションのアクティビティが表示されます。問題は、アクティビティが一時停止している(つまり、onPause()が呼び出された場合)、私はRecordThread:バッファオーバーフローエラーを取得し始めますか?AudioFlinger(59):RecordThread:アクティビティが一時停止しているときにバッファオーバーフロー?

私の推測では、AudioRecorderはメインスレッドで動作しています。また、サービスによって作成されたものの、アクティビティが読み込みを停止するとバッファがオーバーフローします。 AudioRecorderの読み込みは、サービス内で実行されているにもかかわらず、別のスレッドで実行する必要がありますか?

ご協力いただきありがとうございます。

答えて

8

RecordThreadのバッファオーバーフローは、AudioRecordオブジェクトからデータを十分に高速に取り出さない場合に発生します。

(あなたがバックグラウンドで録音したい場合を除きます。)あなたは間違いなくsperateスレッドでaudiorecordのオブジェクトからデータを引き出しループを持っている必要があり、あなたの活動を一時停止します場合は、そのスレッドを停止する必要があります

ここにいますワーキング実装のカップルの例:

+0

ありがとうございました!はい、バックグラウンドで録音したい – dchappelle

1

古い質問ですが、私はサービスで作業を開始するときにこの回答を知りたがっていますので、後で他の人が参照できるようにログに記録します:

サービスに関してよく見落とされますが重要な点は、自動的に独自のスレッドを生成しますが、メインのGUIスレッドで実行されます。これは、「サービス」という言葉を考えても、それにもかかわらず真実に反して直感的です。 (最初の「注意」セクション(http://developer.android.com/guide/topics/fundamentals/services.htmlを参照)を参照してください。

サービスクラスの代わりにIntentServiceクラスを拡張することも考えられます。これは、 "アプリケーションのメインスレッドとは別のすべてのインテントを実行するデフォルトのワーカースレッドを作成します。" (http://developer.android.com/guide/topics/fundamentals/services.html)

誰かがこれを見つけてくれることを願っています!

関連する問題