Autore Topic: Thread e modifica GUI :(  (Letto 393 volte)

Offline minepica

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Tab 2 7.0
  • Sistema operativo:
    Mac OS X 10.11 El Capitan
Thread e modifica GUI :(
« il: 03 Agosto 2015, 16:25:34 CEST »
0
Salve a tutti ho letto tanto in giro per il web e non riesco ancora a capire bene come modificare la GUI attraverso thread secondari, ho letto delle Handlers, ma non riesco a capire come funzionano i messaggi.. ho letto di AsyncTask, ma non ci capisco molto ! In pratica per imparare sto realizzando un giochino stile Space Invaders, su Java avrei esteso la Classe JLabel (settandola a mio piacimento) e implementando Runnable così avrei fatto muovere continuamente i nemici  ... qui non so proprio come fare  :'( :'( :'( ! Aiutatemi PLEASE ! È la prima volta che mi avvicino al mondo della programmazione per Android...

Online iClaude

  • Utente normale
  • ***
  • Post: 243
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Thread e modifica GUI :(
« Risposta #1 il: 05 Agosto 2015, 12:56:27 CEST »
0
Se usi la classe Thread di Java per gestire il thread separato,  per eseguire operazioni nel thread della Gui puoi usate il metodo di Activity runOnUiThread oppure gli Handler.

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Thread e modifica GUI :(
« Risposta #2 il: 05 Agosto 2015, 14:24:35 CEST »
0
io mi trovo bene con le Asyntask si suddivide in questa maniera
Codice (Java): [Seleziona]
private class TaskEsempio extends AsyncTask<String, Void, String> {

@Override
        protected void onPreExecute() {
        super.onPreExecute();
//prima del doinbackground si passa per di qui , qui puoi inizializzare le variabili o un eventuale dialog che mostri il caricamento , gui puoi eseguire comandi che interagiscono con l'interfaccia " ricorda che avviene prima che la task si esegue
}
        @Override
        protected String doInBackground(String... params) {
                              // Esegue le operazione in background , qui non puoi eseguire istruzioni che interagiscono con l'interfaccia
                        return "fine";

        }

        @Override
        protected void onPostExecute(String result) {
        super.onPostExecute(result);
                            //quando finisce il  doinbackground si passa per di qui , mostri quindi il risultato ottenuto dal doinbackground , ovviamentew qui puoi inserire istruzioni che interagiscono con l'interfaccia
                   
        }

       

        @Override
        protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
// qui puoi mostrare eventuali risultati nel mentre che il doinbackground è in esecuzione " puoi interagire con l'interfaccia "
}
    }

per lanciare la task qui sopra , basta fare
Codice (Java): [Seleziona]
new TaskEsempio.execute();
saluti
« Ultima modifica: 05 Agosto 2015, 14:49:36 CEST da pietroconti89 »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Thread e modifica GUI :(
« Risposta #3 il: 05 Agosto 2015, 22:35:44 CEST »
0
Partire da un gioco non è una grande idea, scusa se te lo dico.
Come minimo dovresti usare una surfaceview e disegnare sul canvas.
L'ottimale sarebbe usare una glsurfaceview (quindi opengl es).

Entrambi hanno un loop di rendering quindi il problema che ti stai ponendo non esiste.
A meno di non farsi un thread parallelo (che in teoria dovresti fare per massimizzare le prestazioni) e sincronizzare manualmente il rendering. Cosa che all'inizio non è necessaria.

Il fatto è che una app normale esegue delle operazioni e poi a risultato ottenuto fa quello che ti è stato detto. La latenza può essere anche di secondi,  non importa a nessuno.

In un gioco in teoria hai 16ms (di fatto di meno) per rendeizzare un frame.

Usare la UI standard per un gioco non ha senso.

Inizierei facendo chiamate a un servizio web o facendo operazioni banali in parallelo e aggiornando la ui come ti è stato detto.

 ;-)

Offline minepica

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Tab 2 7.0
  • Sistema operativo:
    Mac OS X 10.11 El Capitan
Re:Thread e modifica GUI :(
« Risposta #4 il: 07 Agosto 2015, 14:48:41 CEST »
0
Grazie a tutti sono finalmente riuscito ad usare AsyncTask ... dato che sono all'inizio e non ho molte idee qualcuno saprebbe suggerirmi qualche app anche stupida da realizzare ai soli fini dell'esercitazione?? Grazie mille ! La questione di OpenGl non l'ho capita molto poiché non avendolo mai usato non so come fare !! Grazie mille a tutti !