2012-11-26 15 views
6

私はAlarmManagerから呼び出されるアクティビティを持っています。それはアラームメッセージです。onStopはonStartの前に呼び出されます

アクティビティがキーガードから呼び出されると、ライフサイクルはonCreate - > onStart - > onResume - > onPause - > onStopの順になり、onCreate - > onStart - > onResumeに戻ります。

これはアラームアクティビティなので、MediaPlayer.stopラインをアクティビティのonStopに入れましたが、アラーム音は開始直後に停止します。

onDestroyの中にMediaPlayer.stopを置くと、正しい動作が得られますが、ユーザーがホームボタンを押すと、アクティビティが消えてサウンドが再生され続けます。

誰でもこのような状況でonPauseとonStopが呼び出される理由を知ることができますか?

EDIT:ログにいくつかの調査の後、私はこの行を見つけました:

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

関連する問題