You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio屏幕旋转后媒体播放器无法暂停/停止问题

问题分析与解决方案

核心问题原因

  • Activity重建导致播放器实例丢失:屏幕旋转时,Activity会被销毁并重建。你的player是Activity的成员变量,重建后会生成新的播放器实例,但之前正在播放的旧实例依然在后台运行,新实例的状态控制不到旧的播放器,所以按钮操作无效。
  • 状态同步错误:直接通过player.state = ...修改状态字段,没有确保播放器内部的实际播放状态与这个字段同步。同时,onPauseClick和onStopClick中未更新musicState,导致保存的状态可能不准确。
  • Timer未清理:Activity销毁时Timer仍在运行,会引发内存泄漏,且重建后新的Timer会和旧的同时运行,造成进度更新混乱。

解决方案一:使用Service托管媒体播放(推荐)

将播放器逻辑移到Service中,Service不受Activity生命周期影响,旋转屏幕时播放器实例不会丢失:

  1. 创建MusicService继承Service,在内部管理MP3Player实例。
  2. Activity通过bindService绑定Service,获取播放器引用进行播放/暂停/停止操作。
  3. 用LiveData或广播让Service向Activity同步播放状态和进度。

解决方案二:快速修复(适合简单场景)

如果暂时不想用Service,可以通过以下方式避免Activity重建:

  1. 修改AndroidManifest.xml:在对应Activity标签中添加属性,阻止旋转时重建Activity:
<activity
    android:name=".CurrentMusic"
    android:configChanges="orientation|screenSize">
</activity>
  1. 修正状态同步逻辑:
    • 在暂停、停止按钮点击方法中更新musicState:
      public void onPauseClick (View v)
      {
          Log.d("MP3 Player", "Music pause button pressed");
          if(player.getState() == MP3Player.MP3PlayerState.PLAYING)
          {
              player.pause();
              musicState = String.valueOf(player.getState());
          }
      }
      public void onStopClick (View v)
      {
          Log.d("MP3 Player", "Music stop button pressed");
          if(player.getState() == MP3Player.MP3PlayerState.PAUSED || player.getState() == MP3Player.MP3PlayerState.PLAYING)
          {
              player.stop();
              musicState = String.valueOf(player.getState());
          }
          player.stop();
      }
      
    • 不要直接赋值player.state,而是通过播放器API恢复状态:比如保存的状态是PLAYING就调用player.play(),同时保存播放进度,重建后调用player.seekTo(progress)恢复位置。
  2. 清理Timer:在Activity销毁时取消Timer:
@Override
protected void onDestroy() {
    super.onDestroy();
    if(timer != null) {
        timer.cancel();
        timer.purge();
    }
}

关键注意事项

  • 不要直接修改player.state字段,播放器内部有独立的状态管理逻辑,必须通过公开API(如play()、pause())改变状态。
  • 旋转时需同时保存播放进度,否则重建后会从头开始播放。

内容的提问来源于stack exchange,提问作者P47HF1ND3R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:35:20