首页 > 解决方案 > 使用单独的课程在多个活动中播放音乐

问题描述

我从各种来源了解到跨活动播放背景音乐需要服务。前几天我找到了这门课,回答了一个较老的问题:

import android.content.Context;
import android.media.MediaPlayer;

public class AudioPlay {

    public static MediaPlayer mediaPlayer;
    public static boolean isplayingAudio=false;

    public static void playAudio(Context c,int id){
         mediaPlayer = MediaPlayer.create(c,id);

         if(!mediaPlayer.isPlaying())           
         {
             isplayingAudio=true;
             mediaPlayer.start();             
         }          
     }

    public static void stopAudio(){     
         isplayingAudio=false;       
         mediaPlayer.stop();
    }   
}

这种方法是否会使应用程序面临错误或内存泄漏?我在几台设备上进行了测试,没有遇到任何问题,看起来比使用服务要简单得多。

标签: javaandroid

解决方案


是的,它会,因为它使用 Context 使得 GC 无法收集 Context,只要你的类具有静态字段。

如果应用程序进入后台并且系统破坏了您的上下文,您将出现意外行为。

Service 实例也是一个 Context,为什么不把这段代码移到 Service 中,同时去掉静态变量呢?


推荐阅读