Autore Topic: Thread (o Runnable)... non in classi nested  (Letto 1921 volte)

Offline BobArctor

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero, Galaxy S4, GP50
  • Play Store ID:
    Michele Valentini
  • Sistema operativo:
    Windows 8
Thread (o Runnable)... non in classi nested
« il: 02 Maggio 2010, 12:32:19 CEST »
0
ciao ragazzi... ho bisogno di un aiutooo!!!
allora, io ho l'activity x, con all'interno una definizione di un handler, e quella di un thread.
tutto funziona bene, il thread comunica all'helper di aggiornare una progressdialog, e l'helper lo fa.
ora: vorrei creare una classe (Thread o runnable) esterna, che può essere utilizzata da diverse activity (quello che cambia è il cursor che utilizza), ma che continui ad utilizzare l'helper.
ora: l'helper, per conoscere la progress dialog da aggiornare, dovrebbe essere definito all'interno dell'activity, non posso creare quindi un Helper da utilizzare in più activity? (che tanto deve sempre fare le stesse 2 cose).
oppure devo creare un'ulteriore activity che conosce sia il thread che l'helper, gli si passa il cursor e via? mi sembrano cose non troppo "carine" oop parlando... -.-''
grazie!

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Thread (o Runnable)... non in classi nested
« Risposta #1 il: 03 Maggio 2010, 17:09:28 CEST »
0
helper ? :)

puoi spiegarti un pochino meglio? se metti un mini-esempio sarebbe meglio .


Ciao
Qlimax

Offline BobArctor

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero, Galaxy S4, GP50
  • Play Store ID:
    Michele Valentini
  • Sistema operativo:
    Windows 8
Re:Thread (o Runnable)... non in classi nested
« Risposta #2 il: 04 Maggio 2010, 10:07:38 CEST »
0
ahahahah scusa! ho confuso handler con helper! :D

allora quello che ora ho io, in una activity, è:
Codice (Java): [Seleziona]
ProgressDialog myPd;
[...]
private Handler saveHandler = new Handler() {
                private final static String TAG = "saveHandler:";

                @Override
                public void handleMessage(Message msg) {
                        Log.i(TAG, "handleMessage");
                        myPd.dismiss();
                        if (msg.what == 1) {
                                Log.d(TAG, "msg.wath==1");
                                vibra();
                                Toast toast = Toast.makeText(Main.this,
                                                R.string.save_successful, Toast.LENGTH_SHORT);
                                toast.show();
                        } else if (msg.what == 0) {
                                Log.d(TAG, "msg.what!=1");
                                vibra();
                                Toast toast = Toast.makeText(Main.this, R.string.save_error,
                                                Toast.LENGTH_SHORT);
                                toast.show();
                        } else if (msg.what == 2) {
                                myPd.incrementProgressBy(1);
                        } else if (msg.what == 3) {
                                myPd = new ProgressDialog(Main.this);
                                myPd.setMessage(getResources()
                                                .getString(R.string.save_progress));
                                myPd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                                myPd.setMax(1);
                                myPd.setCancelable(false);
                                myPd.setCanceledOnTouchOutside(false);
                                myPd.show();

                        }
                }
        };
[...]

        private void metodo() {

                saveHandler.sendEmptyMessage(3);
                new Thread(new Runnable() {
                       
                        @Override
                        public void run() {
                                Log.i(TAG, "run()");
                                }
                }).start();
        }
allora: il metodo "metodo()" parte quando si preme uno specifico bottone.
quello che vorrei io, è:
il thread che ho definito qui dentro, mi serve tale e quale in un'altra activity.
run ha al suo interno un ciclo: ad ogni iterazione, invia un Messaggio all'handler per aggiornare il progresso. poi, prima del ciclo calcola il massimo numero di iterazioni e lo imposta come max nella myPd.
come potrei eseguire tutte queste operazioni "staccando" il thread e quindi non avendo più alcun riferimento a quegli elementi? l'handler?

grazie!!!

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Thread (o Runnable)... non in classi nested
« Risposta #3 il: 04 Maggio 2010, 11:27:25 CEST »
0
come potrei eseguire tutte queste operazioni "staccando" il thread e quindi non avendo più alcun riferimento a quegli elementi? l'handler?

non so se ho capito bene...

vuoi riutilizzare l'handler in un altra activity?

Offline BobArctor

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero, Galaxy S4, GP50
  • Play Store ID:
    Michele Valentini
  • Sistema operativo:
    Windows 8
Re:Thread (o Runnable)... non in classi nested
« Risposta #4 il: 04 Maggio 2010, 11:40:14 CEST »
0
mmm... non proprio...
o meglio, non solo quello...
io ho quel runnable che ho definito all'interno del "metodo".
vorrei riutilizzarlo in un'altra activity, dato che questo salva tutto, e in un'altra salva solo alcune cose, in base ad un cursor.
il fatto è che vorrei mantenere il progressdialog, quindi mi servono dei riferimenti con gli oggetti della activity, che non so come gestire.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Thread (o Runnable)... non in classi nested
« Risposta #5 il: 04 Maggio 2010, 20:02:21 CEST »
0
puoi creare la tua classe thread in questo modo

Codice (Java): [Seleziona]
public class SaveThread extends Thread {
       
        private Handler mHandler;
        private Cursor mCursor;

        public SaveThread(Cursor c,Handler h){
                this.mHandler=h;
                this.mCursor=c;
        }
       
        @Override
        public void run() {
               
                //uso cursor
                //uso handler
               
        }

}

poi nella tua activity dovrai definirti l handler, che agisce sugli elementi dell interfaccia.

quando poi vuoi usare la thread fai cosi
Codice (Java): [Seleziona]
SaveThread sThread=new SaveThread(myCursor,myHandler);
sThread.start();

forse questo puo aiutarti, fammi sapere.

Ciao
Qlimax