java - 使用单独的课程在多个活动中播放音乐
问题描述
我从各种来源了解到跨活动播放背景音乐需要服务。前几天我找到了这门课,回答了一个较老的问题:
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();
}
}
这种方法是否会使应用程序面临错误或内存泄漏?我在几台设备上进行了测试,没有遇到任何问题,看起来比使用服务要简单得多。
解决方案
是的,它会,因为它使用 Context 使得 GC 无法收集 Context,只要你的类具有静态字段。
如果应用程序进入后台并且系统破坏了您的上下文,您将出现意外行为。
Service 实例也是一个 Context,为什么不把这段代码移到 Service 中,同时去掉静态变量呢?
推荐阅读
- php - 如何创建下拉列表并随机显示所选项目之一?
- javascript - 如何在我的不和谐机器人上实时显示来自文件(文本)的信息
- python - pandas replace_if 使用链
- android - 在尝试使用 Appium 自动化我的应用程序时获取 org.openqa.selenium.NoSuchElementException
- python - 使用 Numpy 将数组划分为 N 个不同大小的随机块
- onenote - Microsoft Graph API - OneNote - 创建页面问题 - System.IO.Stream.get_ReadTimeout()
- flutter - Flutter - 视频播放完毕后看不到重播图标
- javascript - 为什么我无法通过浏览器在 Twilio 帐户之间拨打电话?
- r - 在给定年份生成随机日期
- flutter - 如何在 Flutter 中清除 Firebase 通知?