2012-04-09 3 views
6

AudioRecordクラスを使用してオーディオを記録し、recorderBuffer(Short [])のリンクリストであるスレッドを使用しています。これは、このデータのエンコーディングを行い、playerBuffer(リンクされたリスト[ ])。オーディオを再生するために私はAudioTrackクラスとonPeriodicNotification()を使用していますが、playerBufferからデータを読み込んでトラックに書き出します。GC_CONCURRENTをあまり頻繁に実行しないようにするにはどうすればよいですか?

コードはシンプルでまっすぐな状態です。しかし、それはそれが必要な方法で動作しません。 GC_CONCURRENTはいつも食われ、AudioTrackが頻繁に再起動する原因になっています(私はそう思います!)。私はLogCatからのメッセージを以下の取得: -

04-09 12:25:13.757: E/Constructor(10100): inside constructor 
04-09 12:25:13.757: I/ApplicationPackageManager(10100): cscCountry is not German : INS 
04-09 12:25:17.429: E/startRecording(10100): start Recording 
04-09 12:25:17.445: I/AudioCapturer(10100): Audio Recorder created 
04-09 12:25:17.546: I/Audio Player(10100): Audio Track instance created buffer Size : 2972 
04-09 12:25:17.546: I/SpeexThread(10100): Thread Started Successfully.. 
04-09 12:25:17.734: D/dalvikvm(10100): GC_CONCURRENT freed 55K, 44% free 3208K/5639K, external 408K/517K, paused 4ms+6ms 
04-09 12:25:17.945: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 39% free 3765K/6151K, external 408K/517K, paused 3ms+8ms 
04-09 12:25:18.148: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 36% free 4277K/6663K, external 408K/517K, paused 3ms+8ms 
04-09 12:25:18.414: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 33% free 4981K/7367K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:18.734: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 29% free 5877K/8263K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:18.828: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:19.164: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 26% free 7093K/9479K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:19.710: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 22% free 8693K/11079K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:19.984: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:20.414: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 19% free 10741K/13127K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:21.156: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:21.171: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 16% free 12789K/15175K, external 408K/517K, paused 3ms+11ms 
04-09 12:25:21.976: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 14% free 14837K/17223K, external 408K/517K, paused 3ms+9ms 
// same messages errors continue 
04-09 12:25:28.117: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:29.242: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 8% free 29172K/31559K, external 408K/517K, paused 3ms+11ms 
04-09 12:25:29.273: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:30.445: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:30.507: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 8% free 31220K/33607K, external 408K/517K, paused 4ms+12ms 
04-09 12:25:31.601: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:31.820: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 33268K/35655K, external 408K/517K, paused 3ms+12ms 
04-09 12:25:32.757: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:33.187: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 35316K/37703K, external 408K/517K, paused 3ms+13ms 
04-09 12:25:33.929: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:34.593: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 37364K/39751K, external 408K/517K, paused 4ms+11ms 
04-09 12:25:35.085: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:36.039: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 6% free 39412K/41799K, external 408K/517K, paused 3ms+12ms 
04-09 12:25:36.242: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:37.406: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:37.617: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 6% free 41460K/43847K, external 408K/517K, paused 5ms+13ms 
04-09 12:25:38.640: D/dalvikvm(10100): GC_FOR_MALLOC freed 1K, 6% free 43507K/45895K, external 408K/517K, paused 933ms 
04-09 12:25:38.656: I/SpeexThread(10100): exitting Thread 
04-09 12:25:38.656: E/stopRecording(10100): stop Recording 

AudiTrackは、すべての数ミリ秒を再開され、ガベージコレクションは、ほぼ連続的に呼ばれています。 GArbage Colloection呼び出しを最小限に抑えるにはどうすればいいですか?AudioTrackを再起動する理由は何ですか? Plzを助けて...問題の

+8

親愛なるdownvoterは、私が...おかげで質問を改善し、学ぶことができるようにコメントしてください! – aProgrammer

+3

ガベージコレクタを持ってくれてありがとう、それを止めたくない、実装に問題があるためにクリーンアップしています.AudioTrackを使用してコードの一部を投稿する必要があります。 (私はdownvoterではない) – Rob

+0

@ロブ、ありがとう...私はまだ同じ問題に取り組んで...すぐに私は私の進捗状況を投稿します... – aProgrammer

答えて

11

temporaralソリューションは、しかし、このアプローチはを推奨してを避けるべきではないあるdalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(32 * 1024 * 1024);を使用してヒープサイズを増やすことでした。

大規模なデバッグでは、重大な問題は重複したインターフェイスといくつかのリーキーな機能によるものだとわかりました。その後、私は、インターフェイスの 1を取り外し、全体的なソリューションと再織り込みコードを再設計し、そのは私の問題を解決し。いくつかの問題が彼らのであれば

あなたには、いくつかの他のソリューションを持っている場合は共有してください、

+0

共有。 – Rob

+1

私は同じ問題を抱えています。あなたの修正プログラムのサンプルを投稿してください。私は彼らが特定かもしれないが、まだ有用かもしれないことを知っている。ありがとう – Onheiron

+1

私はちょうどメモリサイズを増やすためにonCreate()の内側に上記の行を追加..それは後で、メモリの使用が最適化されるようにあなたのコードをリファクタリングする必要が... – aProgrammer

関連する問題