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