【问题标题】:onStop called before onStartonStop 在 onStart 之前调用
【发布时间】:2012-11-14 08:19:45
【问题描述】:

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

【问题讨论】:

    标签: android wakelock activity-lifecycle


    【解决方案1】:

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

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

    @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 {
            ...
        }
    }
    

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

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

    【讨论】:

      【解决方案2】:

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

      您可以通过对您的清单稍作修改来处理这个问题:

      <activity android:name=".MyActivity"
            android:configChanges="orientation"
            android:label="@string/app_name">
      

      【讨论】:

      • 不,我没有旋转设备。我很确定,因为这种情况总是会发生,即使设备在我的桌子上也是如此。
      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多