6

我有一个从 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}
4

2 回答 2

5

好的,一年多后我意识到这个问题从来没有得到答案,虽然我必须处理这个问题,所以这里是:

现在我正在启动MediaPlayerduring onResume,但如果它已经在播放,我不会再次启动它:

@Override
protected void onResume() {
    super.onResume();
    ...
    if (!mMediaPlayer.isPlaying()) {
        mMediaPlayer.start();
    }
    ...
}

我在 Activity 期间停止它onStop,但前提是 Activity isFinishing

@Override
protected void onStop() {
    super.onStop();
    if (isFinishing()) {
        if (mMediaPlayer != null) {
            mMediaPlayer.stop();
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    } else {
        ...
    }
}

由于在所描述的情况下 Activity 没有完成,而是重新启动(我认为是配置更改),所以 MediaPlayer 不会停止。

我的代码不完全一样,因为我使用了一些其他功能,并且我使用通知将用户带回活动。完整代码在这里:https ://github.com/xisberto/workschedule/blob/master/src/net/xisberto/work_schedule/AlarmMessageActivity.java

于 2013-12-16T21:07:55.733 回答
0

您可能在未处理此事件的情况下旋转了设备。

您可以通过对清单进行少量修改来处理此问题:

<activity android:name=".MyActivity"
      android:configChanges="orientation"
      android:label="@string/app_name">
于 2012-11-26T19:44:18.040 回答