Очистка памяти от другого Java-класса - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь .release () mp3-ресурс MediaPlayer и остановить воспроизведение, которое воспроизводилось в отдельном классе Media_Player.java - при запуске методом onStop () из класса ThirdScreen.java.

Я попытался создать открытый метод, расположенный в Media_Player.java с именем StopPlaying, и вызвать его из метода ThirdScreen.java onStop (). Даже если музыка постоянно играет в фоновом режиме, когда приложение закрыто, метод .release () не работает.

Я также пытался изменить StopPlaying на private и вызывать его из отдельной общедоступной функции из ThirdScreen.java

Также я пытался установить для логической переменной значение true каждый раз, когда музыка воспроизводится в Play (). Когда метод onStop () запускается, он проверяет логическое состояние и запускает mp.stop () и mp.release (), что приводит к пропуску этого метода из-за того, что логическое значение равно false, несмотря на то, что ему присвоено значение true в Play ( )

Media_Player.java

private void Play() {
    StopPlaying();
    mp = MediaPlayer.create(context1, file1);
    mp.start();
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            StopPlaying();
        }
    });

}
Media_Player.java


public void StopPlaying() {
        if (mp != null) {
            mp.stop();
            mp.release();
            mp = null;
        }
    }

ThirdScreen.java

@Override
protected void onStop() {
    super.onStop();
    Log.i("TAG","onstop");
    Media_Player media_player = new Media_Player(this, 0);
    media_player.StopPlaying();
}

Я ожидаю, что музыкальный файл будет выпущен из памяти и остановлен для воспроизведения. При отладке при вызове StopPlaying () из ThirdScreen.java mp уже присваивается значение null. Таким образом .stop и .release не выполняется. Все это с mp3, играющим в фоновом режиме. Возможно, это может быть вызвано переменной области? Любые ссылки, советы или подсказки приветствуются больше, чем рабочий код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...