2010-03-04 14 views
2

J'ai quelques difficultés à obtenir des performances en temps réel adéquates de mon application et je me demande si je l'ai architecturé de façon sous-optimale. L'exigence est que l'application joue un son et trace une ligne sur un Canvas à un intervalle de temps spécifié par l'utilisateur.Architecture Android pour les applications en temps réel

J'ai un Thread qui dort pendant l'intervalle de temps spécifié par l'utilisateur, qui se réveille et utilise un Handler et un Runnable pour effectuer le dessin et la lecture du son requis. Quand je cours l'application, le battement est stable parfois, mais d'autres fois, vous pouvez voir l'effet du GC et des conditions d'avertissement aléatoires du AudioFlinger.

La meilleure approche est-elle d'avoir un filetage Timer sur le fil d'interface graphique via Handler/Runnable? Y a-t-il quelque chose que je peux faire pour augmenter la priorité de mon application pendant qu'elle est visible afin que les autres applications et l'activité Android soient moins susceptibles de l'interrompre? Ai-je besoin d'utiliser le NDK pour accéder à des fonctionnalités en temps réel non présentes dans l'API Java?

Répondre

2

Il semble que ce que vous voulez faire est une boucle de jeu. Il existe de nombreux tutoriels sur la création de boucles de jeu avec un timing plus cohérent que le sommeil, par exemple simple java android game loop. Vous pouvez essayer de chercher en fonction de ce terme, voir si cela aide.

1

De même, lorsque vous essayez de créer des applications en temps réel (comme dans les applications constamment dynamiques, pas scientific real time system), vous devez éviter de laisser fonctionner le garbage collector. Cela prend du temps et peut être perçu comme un retard. Donc, ne créez pas d'objets dont vous devez disposer immédiatement.

Questions connexes