问题首先源于 activity 的生命周期,当 activity 被系统回收然后再次创建时,各种状态会被重置。虽然 MediaPlayer 对应用程序状态的变化具有某些适应性,但是它仍然需要进行初始化才能继续播放。
为了解决这个问题,我们可以在 Activity 的 onResume() 方法中重新初始化 MediaPlayer。可以在 onCreate() 方法中创建 MediaPlayer,然后在 onResume() 方法中检查 MediaPlayer 是否为空并进行重置。
以下是示例代码:
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = MediaPlayer.create(this, R.raw.song);
mediaPlayer.setLooping(true);
}
@Override
protected void onResume() {
super.onResume();
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this, R.raw.song);
mediaPlayer.setLooping(true);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
}
在这个示例中,我们在 onCreate() 方法中创建了 MediaPlayer 并设置其循环播放,然后在 onResume() 方法中检查 MediaPlayer 是否为空,如果为空则重新创建它。我们还在 onDestroy() 方法中释放了 MediaPlayer。
此外,对于某些情况,如在 Activity 被回收之前结束 MediaPlayer 播放的情况下,可能需要在 onPause() 方法中释放 MediaPlayer。
希望这个解决方法能够帮助到您。