Je développe un jeu d'échecs pour Android (http://androidchess.appspot.com), en utilisant SurfaceView
pour l'échiquier. J'ai un dessin Thread
, qui dessine l'échiquier en boucle. Le problème est que quand il n'y a pas d'animations actives (c'est plus que 90% du temps), cela n'a aucun sens de gaspiller le CPU et la batterie pour le dessin. Comment devrais-je résoudre ceci? Peut-être en pause et en reprenant le dessin Thread
?Mettre en pause et reprendre le dessin de fil à SurfaceView
Répondre
Essayez quelque chose comme ça (vous pouvez le tester en essayant this code):
final Object monitor = new Object();
class Drawing implements Runnable
{
@override
void run()
{
while(true)
{
synchronized(monitor)
{
monitor.wait();
}
// draw
}
}
}
public static void main(String[] args) {
// start your thread
while(true)
{
if(needRefresh)
{
synchronized(monitor)
{
monitor.notify();
}
}
}
}
Je recommande d'utiliser un Semaphore si vous voulez signaler une fois, puis garder le dessin (ie ne bloque pas) jusqu'à ce que le signal est éteint.
Merci, attendez/notez est exactement ce que je cherchais. – fhucho
Vous avez à peu près répondu à la question vous-même. Vous devez mettre en pause votre fil de dessin lorsque rien n'est rendu. Lorsque vous utilisez OpenGL SurfaceView, vous pouvez également utiliser un mode immédiat (qui dessine en continu) ou manuel (dessiner sur demande).
Mais comment exactement dois-je faire une pause/reprendre le fil? Le Thread.suspend() est obsolète selon la documentation d'Android. – fhucho
l'approche ci-dessus de lirik fonctionnerait je présume. Une autre approche plus moderne consisterait à utiliser les classes de concurrence java en combinaison avec une approche Lock/Condition ou similaire. – Moritz
- 1. comment mettre en pause et reprendre un thread surfaceView
- 2. mettre en pause et reprendre l'application
- 3. Comment implémenter cliquer et mettre en pause/reprendre en flash?
- 4. Suspendre/Reprendre le fil avec AutoResetEvent
- 5. Comment suspendre et reprendre le fil?
- 6. Android, pause et reprendre gestionnaire callbacks
- 7. Y at-il une possibilité de mettre en pause et de reprendre un TimerTask dans Android?
- 8. Mettre en pause une lecture de SourceDataLine
- 9. Télécharger, mettre en pause et reprendre un téléchargement en utilisant les composants Indy
- 10. Y at-il un moyen de mettre en pause/reprendre le SwingWorker
- 11. Swing Timer, comment faire une pause et le reprendre?
- 12. mettre en pause le lecteur
- 13. Pause/Reprendre les activités enfants d'ActivityGroup?
- 14. comment faire une pause et reprendre NSTimer dans l'iphone
- 15. comment mettre en pause et arrêter un changement ImageView
- 16. Comment mettre en pause le fil d'arrière-plan, puis continuer sur le bouton cliquer?
- 17. Silverlight Confirmer la boîte de dialogue pour mettre en pause le fil
- 18. Existe-t-il un moyen de mettre en pause une animation de base et de la reprendre plus tard?
- 19. Mettre en pause un processus dans Windows
- 20. Comment faire une pause/reprendre un processus externe sous Windows?
- 21. comment obtenir les informations qui a fait lorsque le fil est en pause
- 22. Mettre en pause le fil principal du jeu jusqu'à ce qu'une activité commence et a fini - Android
- 23. moyen le plus facile de mettre en pause un programme python en ligne de commande?
- 24. Arrêter l'exécution de l'applet en cours de chargement, faire une pause/reprendre en utilisant javascript?
- 25. Comment mettre en pause un appel setTimeout?
- 26. Suspendre et reprendre le thread principal en C++ pour Windows
- 27. Mettre en pause un storyboard dans WPF?
- 28. Dans les formulaires Windows DotNet, comment faire une pause dans un formulaire sans mettre le fil du formulaire en veille?
- 29. SurfaceView et Menu créés
- 30. Ios4 ne quitte pas mon programme, il suffit de mettre en pause et de le minimiser
@fhucho J'ai un exemple simple pour vous ... voir ma réponse pour plus de détails. – Kiril