Ошибка в AudioTrack

я работаю над аудиоплеером, который содержит подачу в AudioTrack, с помощью нативного я получаю звук из аудиодорожки, но дело в том, что через некоторое время я получаю ошибку переполнения стека в своем классе AudioTrack. Я увеличил размер кучи в .manifest, но это ничего не меняет. мой журнал:

08-07 11:53:49.843: E/AndroidRuntime(23539): FATAL EXCEPTION: Thread-1298
08-07 11:53:49.843: E/AndroidRuntime(23539): Process: com.example.player, PID: 23539
08-07 11:53:49.843: E/AndroidRuntime(23539): java.lang.StackOverflowError
08-07 11:53:49.843: E/AndroidRuntime(23539):    at android.media.AudioTrack.write(AudioTrack.java:1141)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:100)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:105)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:105)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:105)

пожалуйста, помогите мне . я застрял в нем. по некоторым причинам я использую рекурсивный, а не пока... мой метод...

    void recursive() {
        // Log.e("", "reccursive called");
        if (paused) {
            Log.e("", "is paused        " + paused);
            signalControl.doWait();
        }
        err = NativeWrapper.decodeMP3(minBufferSize * 2, buffer);
        // Log.e("", "" + buffer.length);
        // byte[] bufferbyte = ShortToByte_Twiddle_Method(buffer);
        // Log.e("", "mp3 decoding by native");

        track.write(buffer, 0, minBufferSize); // Write
        track.flush();
        // Log.e("", "write to track");
        // track.flush();
        if (err != MPG123_DONE) {
            recursive();
        }

    }

person Varun Chaudhary    schedule 07.08.2015    source источник


Ответы (1)


Взгляните на этот ответ SO. Надеюсь, это полезно. Если вы не используете рекурсивный метод, вы можете проверить это фрагмент кода.

Цитата из ответа «есть способ увеличить размер стека, хотя вы, возможно, не сможете сделать это в основном потоке пользовательского интерфейса, используя параметры объекта Thread как:

ThreadGroup group = new ThreadGroup("threadGroup");
new Thread(group, runnableObject, "YourThreadName", 2000000).start();

это увеличит размер стека до 2M.

person Arpan    schedule 24.05.2016