2012-11-26 1 views
6

J'ai une activité appelée depuis un AlarmManager. C'est un message d'alarme. Lorsque l'activité est appelée depuis Key Guard, le cycle de vie passe de onCreate -> onStart -> onResume -> onPause -> onStop, puis revient à onCreate -> onStart -> onResume.onStop appelé avant onStart

Puisqu'il s'agit d'une activité d'alarme, j'ai mis la ligne MediaPlayer.stop à l'intérieur de l'onStop de l'activité, mais maintenant le son de l'alarme s'arrête juste après son démarrage. Si je mets le MediaPlayer.stop dans onDestroy, j'obtiens le comportement correct, mais si l'utilisateur appuie sur le bouton home, l'activité disparaît et le son continue de jouer.

Tout le monde peut savoir pourquoi onPause et onStop sont appelés dans cette situation?

EDIT: Après enquête dans le journal, je trouve cette ligne:

11-26 17:39:01.273: I/ActivityManager(385): Activity reported stop, but no longer stopping: ActivityRecord{41827a90 u0 net.xisberto.workschedule/.AlarmMessageActivity} 

Répondre

5

OK, après plus d'un an, je compris que cette question n'a jamais eu une réponse, même si je suis arrivé à gérer le problème, donc ici il va:

maintenant, je commence la MediaPlayer pendant onResume, mais je ne démarre pas encore si elle est déjà jouer:

@Override 
protected void onResume() { 
    super.onResume(); 
    ... 
    if (!mMediaPlayer.isPlaying()) { 
     mMediaPlayer.start(); 
    } 
    ... 
} 

Et J'arrête pendant onStop, mais seulement si l'activité isFinishing:

@Override 
protected void onStop() { 
    super.onStop(); 
    if (isFinishing()) { 
     if (mMediaPlayer != null) { 
      mMediaPlayer.stop(); 
      mMediaPlayer.release(); 
      mMediaPlayer = null; 
     } 
    } else { 
     ... 
    } 
} 

Depuis lors la situation décrite l'activité ne soit pas la finition, mais le redémarrage (changement de configuration, je pense), le MediaPlayer n'arrête pas.

Mon code n'est pas exactement comme ça parce que j'utilise d'autres fonctions et j'utilise une notification pour ramener l'utilisateur à l'activité. Le code complet est ici: https://github.com/xisberto/workschedule/blob/master/src/net/xisberto/work_schedule/AlarmMessageActivity.java

0

properbly vous mis en rotation votre appareil sans manipulation cet événement.

Vous pouvez gérer cela avec une petite modification de votre manifeste:

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

Non, je n'ai pas fait pivoter l'appareil. Je suis sûr à ce sujet, parce que cela arrive toujours, même lorsque l'appareil est sur mon bureau. – Xisberto

Questions connexes