Autore Topic: Runnable mi blocca per qualche secondo l'activity  (Letto 426 volte)

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Runnable mi blocca per qualche secondo l'activity
« il: 01 Luglio 2015, 08:37:56 CEST »
0
Il codice funziona ad eccezione del fatto che per qualche frazione di secondo viene bloccata
l' activity come posso ovviare?
Codice (Java): [Seleziona]
 private final Runnable sendData = new Runnable() {
        public void run() {
            try {
         
                ProgressBar pb = (ProgressBar) findViewById(R.id.pbup);
                pb.setVisibility(View.VISIBLE);
                handler.postDelayed(this, 5000);
           
                aggiorna();
                GroupList();
                pb.setVisibility(View.GONE);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Runnable mi blocca per qualche secondo l'activity
« Risposta #1 il: 01 Luglio 2015, 08:55:10 CEST »
0
Evidentemente le operazioni vengono eseguite sul Main Thread, eseguendole in background su un Thread separato questo non dovrebbe succedere.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Runnable mi blocca per qualche secondo l'activity
« Risposta #2 il: 01 Luglio 2015, 09:05:47 CEST »
0
Come dice LinkOut, se fai girare il Runnable nel main thread (quello della UI), è normalissimo che ti blocchi tutto.

Puoi decidere di farlo girare in un thread separato, però attenzione: se sei dentro un thread secondario, non puoi agire direttamente sulla UI, devi far girare un Runnable nel main thread che si occupi degli aggiornamenti di UI.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Runnable mi blocca per qualche secondo l'activity
« Risposta #3 il: 01 Luglio 2015, 09:13:39 CEST »
0
ok, questo l'avevo capito, ma non riesco a farlo girare in background,
si potrebbe avere un piccolo esempio,
 

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Runnable mi blocca per qualche secondo l'activity
« Risposta #4 il: 01 Luglio 2015, 10:17:58 CEST »
0
ok, questo l'avevo capito, ma non riesco a farlo girare in background,
si potrebbe avere un piccolo esempio,

L'esempio è veramente banale:

Codice (Java): [Seleziona]
myThread = new Thread(sendData);
myThread.start();

Il problema è che il tuo Runnable darà errore se fatto girare in un thread secondario, perchè va a "toccare" la UI.

Il modo più semplice in cui puoi risolvere è usare un AsyncTask, che semplifica la vita allo sviluppatore non esperto, perchè separa il codice che deve girare nel thread secondario da quello che modifica la UI.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store