从另一个Java类清除内存

时间:2019-04-27 18:15:19

标签: android class memory-management android-mediaplayer

我正在尝试释放MediaPlayer mp3资源并停止在单独的Media_Player.java类中播放的播放-当由ThirdScreen.java类的onStop()方法触发时。

我试图在Media_Player.java中创建一个名为StopPlaying的公共方法,并从ThirdScreen.java onStop()方法调用它。即使关闭应用程序时音乐在后台不断播放,.release()方法也不起作用。

我还尝试将StopPlaying更改为private,并从ThirdScreen.java的单独的公共函数中调用它。

此外,每次尝试在Play()中播放音乐时,我都尝试将布尔变量设置为true。触发onStop()方法时,它将检查布尔状态并运行mp.stop()和mp.release(),由于布尔值为false,尽管在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();
}

我希望音乐文件从内存中释放出来,并停止播放。从ThirdScreen.java调用StopPlaying()进行调试时,mp已分配为null。因此,不会执行.stop和.release。 所有这些都会在后台播放mp3。 也许这可能是由可变范围引起的? 任何链接,技巧或提示都比有效的代码更受赞赏。

0 个答案:

没有答案