Je comprends que le système peut tuer l'activité sans appeler onDestroy(). Dire que j'ai un MediaPlayer qui s'exécute même quand il n'est pas visible, je libèrerais le lecteur dans la méthode onDestroy().Android: Libération des ressources dans onDestroy(); méthode
Maintenant, si le système décide de tuer l'activité après avoir appelé onPause() et n'a jamais appelé onDestroy(), qu'est-ce que cela signifie pour mon MediaPlayer? Est-il jamais sorti? C'est un plus gros problème pour Camera car je pense qu'il faut être libéré pour que d'autres activités puissent l'utiliser.
Oui, l'utilisation d'un service est logique! mais j'essayais juste de le simplifier en utilisant un mediaplayer (je ne devrais pas le deviner) Un meilleur scénario est quand la caméra est ouverte pour l'aperçu de MediaRecorder dans l'activité vidéo principale et si vous voulez une autre activité de transparence sur haut de la page avec l'aperçu de la caméra encore visible ci-dessous. Je crois que le framework appellera seulement onPause() puis onStop() sur l'activité principale. Donc, si le framework décide maintenant de tuer l'activité principale et d'ignorer onDestroy(), la caméra n'est jamais libérée - est-ce exact? Y a-t-il une solution de contournement pour garantir camera.release()? – dzeikei
Vous avez raison. La caméra doit être libérée onPause(). Il y a une raison. Si vous «contrôlez» quelle activité est affichée en haut de votre aperçu. Vous ne pouvez pas contrôler quand un service ou plus encore, le système appelle une autre activité en raison d'une diffusion du système qui a besoin de l'appareil photo ou du service de musique. Dans ce cas, le système est très en colère contre vous pour ne pas avoir libéré l'appareil photo :) Vous devez éviter d'afficher une autre activité sur l'aperçu de la caméra. A la place, utilisez getWindowManager(). AddView() pour ajouter ce qui ressemble à une nouvelle activité. – Moncader
Merci! Ça me dérangeait toute la journée :) – dzeikei