我有一个从AlarmManager调用的活动。这是一条警报信息。
从Key Guard调用Activity时,生命周期来自onCreate - > onStart - > onResume - > onPause - > onStop然后回到onCreate - > onStart - >的onResume。
由于这是一个警报活动,我已将MediaPlayer.stop行放在Activity的onStop中,但现在警报声在启动后就会停止。
如果我把MediaPlayer.stop放在onDestroy中,我会得到正确的行为,但是如果用户按下主页按钮,活动就会消失,声音会继续播放。
任何人都可以告诉为什么在这种情况下会调用onPause和onStop?
编辑:在日志中进行一些调查后,我找到了这一行:
11-26 17:39:01.273: I/ActivityManager(385): Activity reported stop, but no longer stopping: ActivityRecord{41827a90 u0 net.xisberto.workschedule/.AlarmMessageActivity}
答案 0 :(得分:5)
好的,经过一年多的时间,我意识到这个问题从来没有得到答案,虽然我得解决了问题,所以在这里:
现在我在MediaPlayer
期间开始onResume
,但是如果它已经在播放,我就不会再次启动它了:
@Override
protected void onResume() {
super.onResume();
...
if (!mMediaPlayer.isPlaying()) {
mMediaPlayer.start();
}
...
}
我在onStop
期间停止了它,但仅限于活动isFinishing
:
@Override
protected void onStop() {
super.onStop();
if (isFinishing()) {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
} else {
...
}
}
由于在描述的情况下活动没有完成,但重新启动(配置更改,我认为),MediaPlayer不会停止。
我的代码并不完全相同,因为我使用了其他一些函数,并使用Notification将用户带回Activity。完整的代码在这里:https://github.com/xisberto/workschedule/blob/master/src/net/xisberto/work_schedule/AlarmMessageActivity.java
答案 1 :(得分:0)
正确地说,您在没有处理此事件的情况下旋转了设备。
您可以通过对清单进行少量修改来解决此问题:
<activity android:name=".MyActivity"
android:configChanges="orientation"
android:label="@string/app_name">