Android onStart之前已调用onStop
我有一个由AlarmManager调用的活动。这是一条警报信息 当从密钥保护调用活动时,生命周期从onCreate->onStart->onResume->onPause->onStop开始,然后返回onCreate->onStart->onResume 由于这是一个警报活动,我将MediaPlayer.stop行放在活动的顶部,但现在警报声在开始后立即停止 如果我将MediaPlayer.stop放在onDestroy中,我会得到正确的行为,但是如果用户按下home按钮,活动就会消失,声音也会继续播放 任何人都能说出为什么在这种情况下会调用onPause和onStop 编辑:在日志中进行一些调查后,我发现这一行:Android onStart之前已调用onStop,android,wakelock,activity-lifecycle,Android,Wakelock,Activity Lifecycle,我有一个由AlarmManager调用的活动。这是一条警报信息 当从密钥保护调用活动时,生命周期从onCreate->onStart->onResume->onPause->onStop开始,然后返回onCreate->onStart->onResume 由于这是一个警报活动,我将MediaPlayer.stop行放在活动的顶部,但现在警报声在开始后立即停止 如果我将MediaPlayer.stop放在onDestroy中,我会得到正确的行为,但是如果用户按下home按钮,活动就会消失,声音也会
11-26 17:39:01.273: I/ActivityManager(385): Activity reported stop, but no longer stopping: ActivityRecord{41827a90 u0 net.xisberto.workschedule/.AlarmMessageActivity}
正确地旋转了设备,但未处理此事件 您可以通过对清单进行少量修改来处理此问题:
<activity android:name=".MyActivity"
android:configChanges="orientation"
android:label="@string/app_name">
好的,一年多之后,我意识到这个问题从来没有得到答案,尽管我必须处理这个问题,所以它是这样的: 现在,我正在
onResume
期间启动MediaPlayer
,但如果它已经在播放,我不会再次启动它:
@Override
protected void onResume() {
super.onResume();
...
if (!mMediaPlayer.isPlaying()) {
mMediaPlayer.start();
}
...
}
我在启动期间停止它,但仅当活动正在完成时停止:
@Override
protected void onStop() {
super.onStop();
if (isFinishing()) {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
} else {
...
}
}
由于在所描述的情况下,活动没有结束,而是重新启动(我认为是配置更改),MediaPlayer不会停止
我的代码与此不同,因为我使用了一些其他函数,并使用通知将用户带回活动。完整的代码如下:不,我没有旋转设备。我确信这一点,因为这种情况经常发生,即使设备放在我的桌子上。