Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onStart之前已调用onStop_Android_Wakelock_Activity Lifecycle - Fatal编程技术网

Android onStart之前已调用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按钮,活动就会消失,声音也会

我有一个由AlarmManager调用的活动。这是一条警报信息

当从密钥保护调用活动时,生命周期从onCreate->onStart->onResume->onPause->onStop开始,然后返回onCreate->onStart->onResume

由于这是一个警报活动,我将MediaPlayer.stop行放在活动的顶部,但现在警报声在开始后立即停止

如果我将MediaPlayer.stop放在onDestroy中,我会得到正确的行为,但是如果用户按下home按钮,活动就会消失,声音也会继续播放

任何人都能说出为什么在这种情况下会调用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}

正确地旋转了设备,但未处理此事件

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

<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不会停止


我的代码与此不同,因为我使用了一些其他函数,并使用通知将用户带回活动。完整的代码如下:

不,我没有旋转设备。我确信这一点,因为这种情况经常发生,即使设备放在我的桌子上。