2012-04-09 25 views
6

Tôi đang sử dụng một chuỗi ghi âm bằng cách sử dụng lớp AudioRecord và được đặt trong recorderBUffer (một danh sách liên kết là Ngắn []), một chuỗi riêng biệt thực hiện mã hóa dữ liệu này và đặt nó vào trình phát playerBuffer (danh sách được liên kết [ ]). Để phát âm thanh, tôi đang sử dụng lớp AudioTrack và onPeriodicNotification() Tôi đọc dữ liệu từ trình phát nhạc và viết nó để theo dõi.Tôi làm cách nào để ngừng GC_CONCURRENT chạy thường xuyên như vậy?

Mã đơn giản và chuyển tiếp thẳng khi xuất hiện. Tuy nhiên nó không hoạt động theo cách nó nên. GC_CONCURRENT ăn mọi lúc và điều này khiến AudioTrack khởi động lại thường xuyên (tôi đoán vậy!). Tôi nhận được thông báo sau từ 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 được khởi động lại sau vài miligiây, và Bộ sưu tập GArbage được gọi gần như liên tục. Làm cách nào tôi có thể giảm thiểu các cuộc gọi của Trình thu thập dữ liệu GArbage và lý do đằng sau việc khởi động lại AudioTrack là gì? Plz Help ...

+8

Kính gửi xuống, nếu chúng là một số vấn đề, vui lòng nhận xét để tôi có thể cải thiện câu hỏi và tìm hiểu ... Cảm ơn! – aProgrammer

+3

Hãy biết ơn bạn có một người thu gom rác, bạn không muốn dừng nó, nó đang dọn dẹp vì có vấn đề với việc triển khai của bạn, bạn cần đăng một số mã của mình bằng cách sử dụng AudioTrack để được trợ giúp thêm. (Tôi không downvoter) – Rob

+0

@Rob, cảm ơn ... Tôi vẫn đang làm việc trên cùng một vấn đề ... Chẳng bao lâu tôi sẽ đăng sự tiến bộ của tôi ... – aProgrammer

Trả lời

11

Một giải pháp temporaral của vấn đề là bằng cách tăng HeapSize sử dụng dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(32 * 1024 * 1024); Tuy nhiên phương pháp này là không được khuyến khích và nên tránh .

Bằng cách gỡ lỗi mở rộng Tôi thấy rằng vấn đề thực sự là do các giao diện chồng chéo và một số chức năng bị rò rỉ. Sau đó tôi loại bỏ một trong những giao diện, thiết kế lại các giải pháp tổng thể và tái yếu tố mã và rằng giải quyết vấn đề của tôi.

Vui lòng chia sẻ nếu bạn có một số Giải pháp khác,

+0

Tuyệt vời, cảm ơn chia sẻ. – Rob

+1

Tôi có cùng một vấn đề, bạn có thể vui lòng đăng một số mẫu bản sửa lỗi của mình không? Tôi biết họ có thể là cụ thể, nhưng vẫn có thể hữu ích. Cảm ơn – Onheiron

+1

Tôi vừa thêm dòng trên vào bên trong onCreate() để tăng kích thước bộ nhớ .. Nó hoạt động, tuy nhiên sau đó bạn cần phải refactor mã của bạn để sử dụng bộ nhớ được tối ưu hóa ... – aProgrammer

Các vấn đề liên quan