[英]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?
编辑:在日志中进行一些调查后,我找到了这一行:
11-26 17:39:01.273: I/ActivityManager(385): Activity reported stop, but no longer stopping: ActivityRecord{41827a90 u0 net.xisberto.workschedule/.AlarmMessageActivity}
好吧,经过一年多的时间,我意识到这个问题从来没有得到答案,虽然我必须解决这个问题,所以在这里:
现在我在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不会停止。
我的代码并不完全相同,因为我使用了一些其他函数,并使用Notification将用户带回Activity。 完整的代码在这里: https : //github.com/xisberto/workschedule/blob/master/src/net/xisberto/work_schedule/AlarmMessageActivity.java
在没有处理此事件的情况下,您正好旋转了设备。
您可以通过对清单进行少量修改来处理此问题:
<activity android:name=".MyActivity"
android:configChanges="orientation"
android:label="@string/app_name">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.