2012-11-26 36 views
6

之前,我有一个是从一个叫AlarmManager活动。这是一个警报信息。的onStop称为在onStart

当从Key Guard调用活动时,生命周期从onCreate - > onStart - > onResume - > onPause - > onStop,然后返回onCreate - > onStart - > onResume。

因为它是一个报警的活动,我已经把活动的的onStop里面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} 

回答

5

OK,虽然我来处理这个问题,所以在这里有云:

现在我开始时onResumeMediaPlayer,但我不重新启动它,如果它已经打:

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

由于所描述的情况在活动期间没有完成,但在重新启动(配置变化,我认为),在MediaPlayer不停止。

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

0

Properbly你旋转你的设备,而无需处理该事件。

您可以用清单的小改款处理这个问题:经过一年多的我意识到,这个问题没有得到回答更

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

不,我还没有旋转的装置。我很确定,因为这总是会发生的,即使设备在我的桌子上。 – Xisberto