Autore Topic: Classe che elabora dati, uso un thread?  (Letto 853 volte)

Offline danko

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Nexus 4
  • Sistema operativo:
    Window 7
Classe che elabora dati, uso un thread?
« il: 29 Maggio 2014, 09:51:24 CEST »
0
Ciao a tutti,
ho una classe che faccio partire durante lo splash screen e mi fa dei calcoli, ci mette <3sec in un nexus 4.
Volevo richiamare la classe quando clicco su un menù, solo che mi rimane bloccato il tastino finchè non finisce l'esecuzione della classe.
Pensavo di fare un thread, è la giusta soluzione? e nel caso, come farlo?

Grazie

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:Classe che elabora dati, uso un thread?
« Risposta #1 il: 29 Maggio 2014, 10:25:44 CEST »
0
Ciao a tutti,
ho una classe che faccio partire durante lo splash screen e mi fa dei calcoli, ci mette <3sec in un nexus 4.
Volevo richiamare la classe quando clicco su un menù, solo che mi rimane bloccato il tastino finchè non finisce l'esecuzione della classe.
Pensavo di fare un thread, è la giusta soluzione? e nel caso, come farlo?

Usare un thread è la soluzione corretta. Ti consiglio di implementarla usando gli AsyncTask (trovi diversa documentazione esplicativa sul forum, sul sito ufficiale android e sul resto di internet).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline danko

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Nexus 4
  • Sistema operativo:
    Window 7
Re:Classe che elabora dati, uso un thread?
« Risposta #2 il: 29 Maggio 2014, 10:33:17 CEST »
0
Codice (Java): [Seleziona]
public class WorkerThread extends Thread {

        private static final String TAG = "WorkerThread";
        public Handler mCallerHandler;
        private final Context context;

        public WorkerThread(Handler handler, Context context) {
                mCallerHandler = handler;
                this.context = context;
                Log.i(TAG, "WorkerThread creato");
        }

        @Override
        public void start() {
                // running = true;
                super.start();
                Log.i(TAG, "richiesto avvio WorkerThread");
        }

        @Override
        public void run() {
                Log.i(TAG, "WorkerThread inizia qua");
//Avvio mia classe per i ricalcolare i dati
                Singleton.getInstance().forceInitSingletonMethod(context);
                Log.i(TAG, "WorkerThread finisce qua");
        }
}

Attualmente il mio codice è questo, viene richiamata la classe Singleton che mi elabora i dati, qual'è la differenza con gli AsyncTask?

Grazie mille.

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:Classe che elabora dati, uso un thread?
« Risposta #3 il: 29 Maggio 2014, 10:42:06 CEST »
0
Attualmente il mio codice è questo, viene richiamata la classe Singleton che mi elabora i dati, qual'è la differenza con gli AsyncTask?

L'AsyncTask usa al suo interno i Thread, ma fornisce all'utilizzatore metodi già pronti per eseguire facilmente, prima durante e al termine dell'elaborazione, codice nel thread di UI (esempio aggiornamento dell'interfaccia grafica con i risultati).

Insomma, se il Thread fa qualcosa e non deve comunicare con nessuno, conviene lasciare il Thread. Se invece al termine dell'esecuzione hai bisogno di comunicare al thread principale qualcosa ed aggiornare l'interfaccia, invece di stare a instanziare handler e inviare messaggi, fai prima con l'AsyncTask.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline danko

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Nexus 4
  • Sistema operativo:
    Window 7
Re:Classe che elabora dati, uso un thread?
« Risposta #4 il: 11 Giugno 2014, 14:28:19 CEST »
0
Ciao,
attualmente la struttura della mia app è la seguente.

splash => main

contemporaneamente dalla splashactivity lancio un AsyncTask che vorrei che mi aggiornasse i dati sui campi della mainActivity.

come posso fare?

lancio AsyncTask da splachactiviy, poi aspetto 1 secondo e vado nella main.intanto parallelamente c'è il job che fa i calcoli..una volta finito vorrei aggiornasse i dati..
mi servirebbe avere la view all'interno del job in modo da cambiare i dati del main direttamente oppure sapere quando è terminato il job dalla mainactivity..
Come faccio?Soluzione?
Spero di essermi spiegato decentemente..

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Classe che elabora dati, uso un thread?
« Risposta #5 il: 11 Giugno 2014, 20:32:35 CEST »
0
lancio AsyncTask da splachactiviy, poi aspetto 1 secondo e vado nella main.intanto parallelamente c'è il job che fa i calcoli..una volta finito vorrei aggiornasse i dati..
mi servirebbe avere la view all'interno del job in modo da cambiare i dati del main direttamente oppure sapere quando è terminato il job dalla mainactivity..
Come faccio?Soluzione?

Io userei un Service in un contesto simile e un LocalBroadcast per informare l'Activity che il service è terminato.
Però...
- perchè lo splash?
- che procedura è che ci mette 4 secondi per terminare i calcoli? Non puoi differirla in un altro momento?
- Attento a come usi il context...

Offline danko

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Nexus 4
  • Sistema operativo:
    Window 7
Re:Classe che elabora dati, uso un thread?
« Risposta #6 il: 12 Giugno 2014, 07:16:18 CEST »
0
- perchè lo splash?Lo splash mi sembrava carino per mostrare il logo e per "ammazzare" almeno 1-2secondi di tempo dell'elaborazione
- che procedura è che ci mette 4 secondi per terminare i calcoli? Non puoi differirla in un altro momento?Devo calcolare per ogni contatto, quando sms, chiamate, durata, numero, etc
- Attento a come usi il context... Cioè? non ho avuto particolari precauzioni a passarlo da una parte all'altra

Grazie

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:Classe che elabora dati, uso un thread?
« Risposta #7 il: 12 Giugno 2014, 07:46:38 CEST »
0
- perchè lo splash?Lo splash mi sembrava carino per mostrare il logo e per "ammazzare" almeno 1-2secondi di tempo dell'elaborazione

Diciamo che lo splash viene generalmente associato alle app di bassa qualità. Mentre quello che viene consigliato è di avere l'app attiva da subito, mentre l'elaborazione procede in background.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline danko

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Nexus 4
  • Sistema operativo:
    Window 7
Re:Classe che elabora dati, uso un thread?
« Risposta #8 il: 12 Giugno 2014, 08:00:50 CEST »
0
Diciamo che lo splash viene generalmente associato alle app di bassa qualità. Mentre quello che viene consigliato è di avere l'app attiva da subito, mentre l'elaborazione procede in background.

ma veramente viene associato alle app di bassa qualità? non che la mia non lo sia, ma mi sembrava di averlo notato in quelle + famose tipo duolingo, facebook etc.

Cmq se facessi così forse mi toglierei tutti i problemi, avviando l'asyncTask dal main (ha 3 tab, ognuno è un fragment) e aggiornando i dati pian piano...
« Ultima modifica: 12 Giugno 2014, 09:41:25 CEST da danko »