2009-08-01 6 views
2

J'ai une classe qui étend Activity et je suis en train de créer un objet de cette classe dans une classe java normale, mais il me lance une exception:Création d'un objet d'Android Classe d'activité

Can't create handler inside thread that has not called looper.prepare

Qu'est-ce que est-ce que je fais mal?

Merci d'avance.

+0

comment diable voulez-vous que quelqu'un vous aide, quand vous ne pouvez pas être dérangé poster une question détaillée? –

Répondre

1

Le gestionnaire s'exécute dans n'importe quel thread créé. Donc, si vous ne créez pas l'instance de la nouvelle classe dans le thread d'interface utilisateur, le gestionnaire ne s'exécute pas dans le thread d'interface utilisateur et vous rencontrerez un problème.

J'ai essayé une fois de gonfler dans un GUIs thread séparé pour des raisons de performance . Je n'ai touché à aucune fenêtre à ce point, mais en gonflant j'ai eu le même message d'erreur et j'ai juste couru Looper.prepare() dans mon fil et tout allait bien.

Un boucleur exécute la boucle de message d'un thread. Si vous n'appelez pas Looper.prepare() (puis Looper.loop()) dans un thread, ce thread n'aura pas de boucle de message, donc ne peut pas avoir d'objets Gestionnaire acceptant les messages .

4

Vous devriez lire sur le application fundamentals des applications Android

Je ne peux pas penser à un exemple où vous devez créer une activité vous objet. vous devriez utiliser l'appel Context.startActivity() pour démarrer une activité. De toute façon, pour répondre à votre question - une activité implémente une file d'attente de messages (en utilisant un gestionnaire) où les messages peuvent être envoyés au thread en cours d'exécution de l'activité pour effectuer certaines tâches. Cela signifie que le thread qui exécute le code d'activité reste en attente de ces messages (un exemple de ces messages est la réponse des utilisateurs à l'interface utilisateur de votre application). Pour ce faire, vous devez utiliser un thread Looper qui «boucle» (ou attend en quelque sorte) les messages sur lesquels agir. Le thread principal de votre application qui restitue également l'interface utilisateur de votre application est un thread de boucleur.

Si, pour une raison quelconque, vous avez besoin de créer un objet d'activité manuellement, vous devez repenser la façon dont vous concevez votre application. Utiliser startActivity est tout ce qui est requis.

Questions connexes