Android créer un nouveau fil dans la classe de service
J'ai créé une classe de service et maintenant je suis en essayant de lancer un nouveau thread dans cette classe. Le Service est démarré dans mon MainActivity
et cela fonctionne bien. La première Toast.Message
dans le onCreate()
section montre, mais le message dans mon fil runa()
n'est pas venu. Pense qu'il doit travailler avec une nouvelle Runnable()
.
public class My Service extends Service {
private static final String TAG = "MyService";
Thread readthread;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); //is shown
readthread = new Thread(new Runnable() { public void run() { try {
runa();
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
} } });
readthread.start();
Log.d(TAG, "onCreate");
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
}
@Override
public void onStart(Intent intent, int startid) {
//Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
//Log.d(TAG, "onStart");
}
public void runa() throws Exception{
Toast.makeText(this, "test", Toast.LENGTH_LONG).show(); //doesn't show up
}
}
Serait sympa si quelqu'un pouvait m'aider:)
avez-vous des exceptions? Je suppose que le
votre commentaire est le answser à sa question. Déplacer comme réponse, merci
ok merci, est-il une solution pour cela?
Thread
est exécuté sur un fond Thread
d'où vous ne pouvez pas montrer un toast.votre commentaire est le answser à sa question. Déplacer comme réponse, merci
ok merci, est-il une solution pour cela?
OriginalL'auteur user2295158 | 2013-05-09
Vous devez vous connecter pour publier un commentaire.
La
Thread
que vous créez, ne sera pas exécuté sur leMainThread
, donc vous ne pouvez pas montrer unToast
. Pour afficher uneToast
à partir d'un arrière-planThread
, vous devrez utiliser unHandler
, et l'utilisation queHandler
pour afficher laToast
.Ce serait la solution à votre problème, bien que je ne considère pas ça une bonne "architecture" ou de la pratique que je ne sais pas exactement ce que vous voulez atteindre.
this
pour porter un Toast à ne marchera pas!J'ai édité la réponse.
nice, cela fonctionne très bien! merci!!!!
OriginalL'auteur Ovidiu Latcu
Vous ne pouvez pas afficher les Toasts de non-INTERFACE de threads. Votre Service est en cours d'exécution sur le thread principal, mais vous sont en cours d'exécution de votre
runa()
méthode dans un thread d'arrière-plan. Vous devez utiliser un gestionnaire et lui demander d'afficher les toasts sur le thread d'INTERFACE utilisateur. Voir cette réponse pour savoir comment c'est fait.le
Service
s'exécute sur l'MainThread
.IntentService
s'exécute sur un thread d'arrière-plan.Le Service fonctionne sur le Thread Principal par défaut, vous devez créer un sujet séparé pour le faire fonctionner en arrière-plan.
C'était une faute de frappe. Il fixe maintenant.
Le Service est un Contexte. Il suffit de stocker une référence dans votre onCreate() à l'aide de context = ce et de le transmettre plus tard, quand vous en avez besoin.
OriginalL'auteur Anup Cowkur
La meilleure façon de mettre à jour l'INTERFACE utilisateur à partir d'un Fil, à l'aide d'un gestionnaire ou UIThread
Essayez ce code: et ne pas oublier de mettre le service dans le
Manifest
du premier fichier.OriginalL'auteur Victor Ruiz C.