Я создал приложение, которое включает около 600 небольших файлов ogg. Всего около 15 МБ. У каждого файла будет avg. звука 6 секунд. Это не игровое приложение, а обучающее приложение для детей.BpMemoryHeap проблема с приложением, которое включает soundpool
Я попытался загрузить звуки на Media Player. Он отлично работает один раз, и когда он постоянно играет, я не получаю никакого звука. Он пуст.
Так что я попробовал звуковой пул. Звуки воспроизводятся только после того, как он загружается в soundpool loader. поэтому я попытался загрузить звуки в начале приложения. Таким образом, загрузка этих звуков занимает около 30 секунд, после чего появляется главный экран (я загружаю звуки с использованием Async в фоновом режиме, а индикатор прогресса отображается спереди).
Эта установка работает просто отлично на около 450 Ogg файлов при добавлении один звук более чем 450 я получаю ошибку кучи на погрузочной пару звуков и приложение силы закрывается ниже ошибки:
02-27 07:13:02.614: I/Choreographer(27172): Skipped 35 frames! The application may be doing too much work on its main thread.
02-27 07:13:11.012: E/IMemory(27172): binder=0x56f0c430 transaction failed fd=-2147483647, size=0, err=-2147483646 (Unknown error 2147483646)
02-27 07:13:11.012: E/IMemory(27172): cannot dup fd=-2147483647, size=0, err=-2147483646 (Bad file number)
02-27 07:13:11.012: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56f0c430), size=0, fd=-1 (Bad file number)
02-27 07:13:11.020: W/dalvikvm(27172): threadid=37: thread exiting with uncaught exception (group=0x40d75930)
02-27 07:13:11.153: E/IMemory(27172): cannot dup fd=818, size=1048576, err=0 (Too many open files)
02-27 07:13:11.153: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56f09e80), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.403: E/IMemory(27172): cannot dup fd=972, size=1048576, err=0 (Too many open files)
02-27 07:13:11.403: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56f09988), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.450: E/IMemory(27172): cannot dup fd=873, size=1048576, err=0 (Too many open files)
02-27 07:13:11.450: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56f0a500), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.520: E/IMemory(27172): cannot dup fd=954, size=1048576, err=0 (Too many open files)
02-27 07:13:11.520: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56efbde8), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.614: W/dalvikvm(27172): threadid=35: thread exiting with uncaught exception (group=0x40d75930)
02-27 07:13:11.677: E/IMemory(27172): cannot dup fd=903, size=1048576, err=0 (Too many open files)
02-27 07:13:11.677: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56f09b30), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.716: E/IMemory(27172): cannot dup fd=978, size=1048576, err=0 (Too many open files)
02-27 07:13:11.716: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x5d99add0), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.747: E/IMemory(27172): cannot dup fd=941, size=1048576, err=0 (Too many open files)
02-27 07:13:11.747: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56efb710), size=1048576, fd=-1 (Bad file number)
02-27 07:13:11.809: E/IMemory(27172): cannot dup fd=991, size=1048576, err=0 (Too many open files)
02-27 07:13:11.809: E/IMemory(27172): cannot map BpMemoryHeap (binder=0x56efaa90), size=1048576, fd=-1 (Bad file number)
Как я исправить эту проблему? большая часть проблемы с кучей связана с курсором базы данных, а не с soundpool.
Если это невозможно решить, что такое работа с использованием soundpool, когда у меня есть 600 звуков для загрузки?
Спасибо!
Есть ли способ разбить загрузку файла в логические сегменты? Нужно ли загружать все 600 одновременно? Например, если у вас есть три режима воспроизведения, можете ли вы загружать только звуки, необходимые для каждого режима после его выбора? – Geobits
Я пробовал это сделать .. Например. У меня есть 3 модуля. Каждый раз, когда я нажимаю на каждый модуль, я использовал загруженные звуки, но потом я ожидал, что звуки загрузятся, а затем экран появится. Что на самом деле не является удобным для пользователя? – TheDevMan
Честно говоря, ни одно из 30-ти секундного запуска, особенно для детской игры. Ответ alex ниже, вероятно, является хорошим решением для вас. – Geobits