Android Studio

di il
2 risposte

Android Studio

Salve ragazzi, ho iniziato a programmare con android studio, solo che ho un problema. In pratica, sto cercando d usare un intentService, ma non so come fargli svolgere delle azioni in background...
Da come ho capito dovrei fare l'override del metodo onHandleIntent(), questo è il codice che ho provato per vederne il funzionamento:

protected void onHandleIntent(Intent intent)
    {
        synchronized (this)
        {
            while (true)
            {
                try
                {
                    wait(3000);
                    Toast.makeText(this, "Servizio in ascolto", Toast.LENGTH_LONG).show();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
Dovrebbe visualizzare un Toast ogni 3 secondi, ma in realtà ciò non succede, qualcuno sa dirmi perchè?

2 Risposte

  • Re: Android Studio

    Ciao!

    hai provato a vedere la classe AsyncTask??
  • Re: Android Studio

    Ciao, leggendo il tuo codice ho notato alcuni punti che secondo me vale la pena chiarire:
    • Sebbene non ci sia a livello pratico una differenza enorme, di solito il metodo "wait" è usato per motivi di sincronizzazione, mentre per aspettare si usa "Thread.sleep(...)"
    • Il metodo "onHandleIntent" è eseguito in un worker thread, ovvero NON nell'UI thread, per cui non puoi modificare la UI direttamente, ma devi farlo fare all'UI thread
    • Per lo stesso motivo non puoi usare un AsyncTask, il cui scopo è quello di eseguire operazioni in un worker thread (inoltre, per versioni precedenti a Jelly Bean DEVI caricare la classe AsyncTask nell'UI thread)
    Detto questo, per poter mostrare un Toast dal tuo IntentService devi creare un Handler associato all'UI thread (banalmente: "new Handler(Looper.getMainLooper())") e poi pubblicare attraverso il metodo "post" un Runnable che si occupi di creare e mostrare il Toast.
Devi accedere o registrarti per scrivere nel forum
2 risposte