2010-11-07 10 views
2

Je suis un programme Android-App pour les personnes aveugles. Donc, j'utilise TTS sur chaque activité dans mon application. Je ne veux plus initialiser TTS sur chaque activité car cela prend du temps et des ressources, donc je crée un objet TTS dans ma classe d'application et je l'utilise pour les activités. Ça fonctionne bien.Réutiliser TTS-Object sur plusieurs activités différentes dans mon application Android

Mais la documentation dit que vous avez quelque chose comme ceci:

protected void onDestroy() { 
    super.onDestroy(); 
    if (mTts != null) { 
     mTts.shutdown(); 
    } 
} 

Mais je ne peux pas le faire parce que je ne veux pas arrêter mon objet partagé (chaque fois qu'une activité est détruite) mais si mon programm get est distraite, je devrais l'éteindre. Alors: Où appeler .shutdown()? Ou quelqu'un connaît-il un meilleur moyen de s'assurer que TTS se charge rapidement?

Répondre

0

Or does anybody know a better way to ensure that TTS is loading quickly?

J'ai trouvé une solution qui fonctionne pour moi:

Le TTS moteur global ne l'arrêt que s'il n'y a plus un lien vers elle. Donc, je "utilise" TTS dans la principale activité de mon application et toutes les autres activités y sont liées. Il y a donc à tout moment une référence et le moteur ne s'arrête pas.

BTW: Si vous doen't faire le .shutdown() vous obtenez cette erreur:

 
ERROR/ActivityThread(619): Activity com.your.app has leaked ServiceConnection [email protected] that was originally bound here 
ERROR/ActivityThread(619): android.app.ServiceConnectionLeaked: Activity com.your.app has leaked ServiceConnection [email protected] that was originally bound here 
+0

Bonjour Poshi, Pouvez-vous nous expliquer un peu plus comment vous utilisez l'objet TTS? Je comprends que vous en avez un dans l'activité principale, qu'en est-il du reste? Dans mon cas, je dois déclarer dans chaque activité un nouveau TTS. Et si j'ai bien compris, vous n'avez qu'un seul objet TTS pour toutes les activités. Merci! – Dayerman

0

Pour votre information, TTS n'est pas héritable entre les classes. Il a été documenté sur le forum Google Android. Je vois votre sur détruire. Fermez-vous aussi sur la pause?

1

Je recommande fortement d'utiliser TTS à partir d'un service, plutôt que d'une activité. En outre, assurez-vous que vous attendez que le service TTS termine l'initialisation avant de faire des appels pour parler ou synthétiser des fichiers. Vous pouvez créer une référence singleton statique à votre objet TTS dans le service, que vous pouvez obtenir à partir de n'importe quelle activité après le démarrage du service. Je peux poster des extraits de code plus tard si nécessaire.