2012-04-09 17 views
6

AudioRecord sınıfını kullanarak ses kaydını kaydeden ve kaydediciBUffer (Kısa [] 'nın bağlantılı bir listesi olan), bu verilerin kodlamasını yapan ve bunu bir playerBuffer'a (ayrı bir listeye) yerleştiren ayrı bir iş parçacığına yerleştirilen bir iş parçacığı kullanıyorum [ ]). Ses çalmak için AudioTrack sınıfını kullanıyorum ve onPeriodicNotification() ile ilgili verileri playerBuffer'dan okuyorum ve izlemeye yazdım.GC_CONCURRENT sık sık çalıştırmayı nasıl durdurabilirim?

Kod, görüldüğü gibi basit ve düz olarak ileri doğrudur. Ancak gerektiği şekilde çalışmıyor. GC_CONCURRENT her zaman yiyor ve AudioTrack'ın çok sık tekrar başlamasına neden oluyor (sanırım!). Ben LogCat gelen iletileri aşağıdaki olsun: -

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 her birkaç milisaniye yeniden başlatılır ve çöp toplama neredeyse sürekli olarak adlandırılır. GArbage Colloection çağrılarını nasıl en aza indirebilirim ve AudioTrack'ın yeniden başlatılmasının ardındaki sebep nedir? Plz Yardım ... Sorunun

+8

Sevgili downvoter, ben ... Teşekkür soru iyileştirmek ve bilgi edinebilmesi için yorum lütfen !!! – aProgrammer

+3

Çöp toplayıcısına sahip olduğunuz için müteşekkir olun, bunu durdurmak istemiyorsunuz, çünkü uygulamalarınızla ilgili bir sorun var, daha fazla yardım almak için AudioTrack kullanarak kodunuzun bir kısmını göndermelisiniz. (Downvoter değilim) – Rob

+0

@Rob, teşekkürler ... Hala aynı sorun üzerinde çalışıyorum ... Yakında ilerleyeceğim. – aProgrammer

cevap

11

A temporaral çözüm dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(32 * 1024 * 1024); kullanarak HeapSize artırarak oldu Ancak bu yaklaşım tavsiye ve kaçınılması olmalı değil olduğunu.

Kapsamlı hata ayıklama ile gerçek sorunun çakışan arabirimler ve bazı kaçak işlevler nedeniyle olduğunu buldum. Daha sonra Arayüzü birini kaldırıldı, genel çözüm ve yeniden çarpanlarına kod yeniden tasarlanmış ve o benim problem çözüldü. Bazı sorun onların ise

bazı başka Çözüm varsa paylaşın,

+0

Mükemmel, teşekkürler paylaşım. – Rob

+1

Aynı sorunu yaşıyorum, düzeltmelerinizin bazı örneklerini gönderebilir misiniz? Belirli olabileceğini biliyorum, ama yine de yararlı olabilir. Teşekkürler – Onheiron

+1

Bellek boyutunu artırmak için sadece yukarıdaki satırı onCreate() içine ekledim .. Ancak, daha sonra bellek kullanımını optimize etmek için kodunuzu yeniden kodlamak gerekir ... – aProgrammer