我有一个通过MediaPlayer
. 通常,当我想停止歌曲时,我将 MediaPlayer 传递给CountDownTimer
将音量减弱为零的 a,然后释放 MediaPlayer。这似乎工作正常,除了当我的活动暂停时遇到问题,例如在触摸主页按钮后。
我正在调用cancel()
CountDownTimer onPause
,但似乎由于活动正在暂停,因此 CountDownTimer 在销毁之前从未收到消息(?),因此finish()
不会调用 CountDownTimer 。
这样做的结果是,在退出应用程序后,音乐会继续以 CountDownTimer 中上次设置的音量继续播放,但它永远不会结束。所以现在我被困在我的应用程序之外,MediaPlayer 正在运行并且无法阻止它(非常糟糕)。
活动退出时不调用 CountDownTimer 是否正常onFinish
,即使我调用了取消?
这是我的代码:
public void StopSong(boolean fadeout){
musicPlaying = false;
if(_player != null) {
final int fadeTime = 1000;
CountDownTimer timer = new CountDownTimer(fadeTime,50) {
final private MyMusicPlayer mFadePlayer = _player;
@Override
public void onTick(long millisUntilFinished) {
mFadePlayer.setFade((float)millisUntilFinished / (float)fadeTime);
Log.d("tag", "Fade timer " + millisUntilFinished+ "ms remaining.");
}
@Override
public void onFinish() {
mFadePlayer.stop();
mFadePlayer.release();
Log.d("tag", "Fade timer finished, releasing resource.");
}
};
timer.start();
mFadeTimers.add(timer);
Log.d("tag", "Song stopping, starting fade timer.");
_player = null;
}
}
在 onPause 中:
for(CountDownTimer t : mFadeTimers){
Log.d("tag", "Cancelling fade timer on destroy.");
t.cancel();
}
mFadeTimers.clear();
如果一切正常,我会看到“取消淡入淡出计时器”日志消息,然后是“淡入淡出计时器完成,释放”,但我从未收到onFinish()
logcat 消息。
我只看到这个:
tag Song stopping, starting fade timer.
tag Application exiting, destroying all audio resources
tag Cancelling fade timer on destroy.
如何在退出活动时成功中止所有倒计时?