J'ai un service qui surveille une connexion socket. Lorsque la connexion est perdue, elle doit afficher un Toast informant l'utilisateur qu'il se reconnecte. Cela fonctionne bien la première fois. Après cela, je vois le enqueueToast dans le journal mais le toast n'est pas affiché. Toutes les idées sont appréciées. Je pensais que cela allait être facile à ajouter, mais il me manque quelque chose.Android Toast démarré à partir du service affiche uniquement une fois
entrée de journal
INFO/NotificationService (118): enqueueToast pkg = com.abc [email protected] durée = 1
code qui appelle la Toast
public class ConnectionService extends Service
{ .....
public void restartConnection()
{
try
{
Log.i(this.toString(), "Attempting to reconnect...");
// increase the wait between each retry until the max is reached
int sleepTime = reconnectCounter * MIN_RECON_WAIT;
if (sleepTime > MAX_RECON_WAIT)
{
sleepTime = MAX_RECON_WAIT;
}
String msg = "The connection has been lost. Restart attempt will start in: " + sleepTime/1000 + " seconds";
Log.i(this.toString(), msg);
Toast.makeText(getApplicationContext(), msg , Toast.LENGTH_LONG).show();
Thread.sleep(sleepTime);
// increment the counter
reconnectCounter++;
this.startConnectionThread();
}
catch (Exception e)
{
Log.e(this.toString(), "Exception: " + e.toString());
e.printStackTrace();
}
}// end retartConnection
C'est probablement un problème de threading. Appelez-vous Toast.show() à partir du thread d'interface utilisateur ou d'un thread séparé? Pourriez-vous donner un peu plus de contexte à cette méthode. – Vuk
Appelé à partir d'une classe Service qui a été démarrée par un appel bindService à partir de l'activité qui est affichée en premier à l'utilisateur. J'espérais utiliser un appel runOnUiThread pour montrer le toast, mais je n'arrivais pas à comprendre comment l'utiliser dans le Service. – bursk