Ho un servizio che monitora una connessione socket. Quando la connessione viene persa, è necessario visualizzare un Toast che informa l'utente che si sta ricollegando. Questo funziona bene la prima volta. Dopodiché vedo il file di accodamento nel registro ma il brindisi non viene visualizzato. Qualsiasi idea è apprezzata. Ho pensato che sarebbe stata una cosa facile da aggiungere, ma mi manca qualcosa.Android Toast avviato dal servizio viene visualizzato solo una volta
voce del registro
INFO/NotificationService (118): enqueueToast pkg = com.abc [email protected] durata = 1
Codice che chiama 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
È probabilmente un problema di threading. Stai chiamando Toast.show() dal thread dell'interfaccia utente o da uno separato? Potresti dare un po 'più di contesto a questo metodo. – Vuk
Chiamato dall'interno di una classe del servizio che è stata avviata da una chiamata bindService dall'attività che viene prima visualizzata all'utente. Speravo di usare una chiamata runOnUiThread per mostrare il brindisi, ma non riuscivo a capire come usarlo nel servizio. – bursk