Autore Topic: Blocco della UI usando i thread  (Letto 354 volte)

Offline marc093

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GT-N7100
Blocco della UI usando i thread
« il: 16 Febbraio 2015, 19:09:33 CET »
0
Buonasera a tutti, sono nuovo del mondo della programmazione android e dopo svariati tentativi continuo ad avere il seguente problema:
ho un Fragment che controlla un valore intero tramite due bottoni: + e -, e voglio che tenendo premuto uno dei due bottoni il valore della variabile continui ad aumentare.
Ho risolto mettendo il seguente codice:
Codice (Java): [Seleziona]
timeplus.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction()==MotionEvent.ACTION_DOWN) {
                    msg.obj=STARTPLUS;
                    try {
                        iHandler.send(msg);
                    }
                    catch (RemoteException E) {}
                    return true;
                }
                if (event.getAction()==MotionEvent.ACTION_UP) {
                    msg.obj=STOP;
                    try {
                        iHandler.send(msg);
                    }
                    catch (RemoteException E) {}
                    return false;
                }
                return true;
            }
        });
        timeminus.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction()==MotionEvent.ACTION_DOWN) {
                    msg.obj=STARTMINUS;
                    try {
                        iHandler.send(msg);
                    }
                    catch (RemoteException E) {}
                    return true;
                }
                if (event.getAction()==MotionEvent.ACTION_UP) {
                    msg.obj=STOP;
                    try {
                        iHandler.send(msg);
                    }
                    catch (RemoteException E) {}
                    return false;
                }
                return true;
            }
        });
in cui "iHandler" invia messaggi a un Service che provvederà a rispondere tramite un altro Handler con la variabile aggiornata.
Il problema è che se all'interno del service è presente un ciclo, all'avvio di quest'ultimo l'interfaccia principale si blocca e dopo poco compare il messaggio di android: L'app non risponde.
Se invece non sono presenti cicli non c'è nessun problema.
Oltre al service ho provato anche attraverso Thread e AsyncActivity ma non riesco a venirne a capo...
Per completezza: nell'Activity principale c'è anche un'altra AsyncActivity che lavora per gran parte del tempo.

Grazie in anticipo per l'attenzione. :D

Post unito: 17 Febbraio 2015, 16:19:55 CET
Tra varie ricerche e prove sto ottenendo dei risultati:
Praticamente nel service adesso ho una sola funzione: onStartCommand, all'interno del quale ho solo un Handler con relativo Looper per la gestione dei messaggi che gli arrivano dal Fragment.
In base ai messaggi ricevuti, dall'interno del Looper attivo un Thread per l'aggiornamento della variabile.
Il problema che mi si presenta ora è un altro: Se nell'activity principale è attivo un AsyncTask l'intera interfaccia si blocca (sia l'activity che i fragment a essa collegati), se invece questo AsyncTack non è in esecuzione tutto funziona...
Qualcuno ha qualche idea sulla motivazione di tutto questo?
« Ultima modifica: 17 Febbraio 2015, 16:19:55 CET da marc093, Reason: Merged DoublePost »