我有一个通过
我在
这导致应用程序退出后,音乐仍然以CountDownTimer上次设置的音量播放,但从未结束。所以现在我被困在我的应用程序外面,MediaPlayer在运行,而且没有办法停止它(非常糟糕)。
即使我调用了cancel,当活动退出时,CountDownTimer是否无法调用
这是我的代码:
如果一切正常运行,我将看到“取消淡入计时器”日志信息,然后是“淡入计时器完成,释放”,但我从未收到
我只看到这个:
如何在退出活动时成功中止所有倒计时器?
MediaPlayer
播放音乐的活动。通常情况下,当我想停止歌曲时,我会将MediaPlayer传递给一个CountDownTimer
,将音量淡出至零,然后释放MediaPlayer。这似乎很好用,但是当我的活动暂停时(例如触摸主页按钮),我遇到了一个问题。我在
onPause
中调用cancel()
,但由于活动正在暂停,CountDownTimer在被销毁之前似乎从未收到消息(?),因此CountDownTimer的finish()
没有被调用。这导致应用程序退出后,音乐仍然以CountDownTimer上次设置的音量播放,但从未结束。所以现在我被困在我的应用程序外面,MediaPlayer在运行,而且没有办法停止它(非常糟糕)。
即使我调用了cancel,当活动退出时,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.
如何在退出活动时成功中止所有倒计时器?