Autore Topic: Thread questo sconosciuto!  (Letto 946 volte)

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Thread questo sconosciuto!
« il: 10 Novembre 2010, 10:36:04 CET »
0
Ciao,
volevo chiarire il concetto di THREAD.
Per chi come me ha sempre sviluppato in DELPHI questo concetto non è molto chiaro.

Volevo porvi delle domande, ma partiamo da quello che il THREAD e'.

Permette di eseguire del codice parallelamente alla progetto principale.
Il progetto principale è a sua volta anche lui un THREAD.
Con il RUN lo si fa partire ma non è detto che parti subito.

Supponiamo che:
 il THREAD principale che stampa a video i numeri dal 1 al 10
 il secondo THREAD le lettere dell'albafabeto
lo start del secondo THREAD è subito all'inizio
abbiamo un risultato probabilmente così:
1 a 2 b 3 c 4 d ecc ecc. 

Ora,
 capisco il motivo per cui il THREAD non da lo start subito, credo che una motivazione possa essere la CPU. Probabilmente impegnata a fare dell'altro attende il momento buono per non appesantire nuovamente il tutto.
 
Ma non capisco il motivo per cui devo mettere una parte di codice sotto THREAD ed i benefici che ne posso avere da questa operazione. (QUESTA é LA PRIMA DOMANDA)

Supponiamo di dover recuperare da una pagina ASP del valori e controllare se all'interno c'è il valore esempio 5
Devo tassativamente creare un THREAD che gestisca la connessione ed il recupero dei dati ma lo stesso THREAD deve fare anche il controllo del valore 5.
Il controllo non può farlo il THREAD principale perché viaggiando parallelamente e non avrebbe la stringa da controllare. GIUSTO?

Diciamo che già questo mi potrebbe aiutare.
Vi prego di non rispondermi leggiti qua o leggiti la, questo l'ho già fatto.
Vorrei chiarirmi il tutto parlando (in questo caso scrivendo) per sciogliere ogni dubbio.

Ciao
Alessandro
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Thread questo sconosciuto!
« Risposta #1 il: 10 Novembre 2010, 11:01:03 CET »
+1
Vi prego di non rispondermi leggiti qua o leggiti la, questo l'ho già fatto.

Cosi parti male! Fammi essere un poco presuntuoso dicendo che se tu avessi letto in modo attento qua e la avresti la risposta alla tua domanda.

In ogni caso...
Effettuare delle operazioni in thread paralleli serve esclusivamente ad una cosa: rendere la tua applicazione più responsiva possibile, infatti il thread principale delle applicazioni android è legato all'interfaccia grafica (e qui parte il primo link, se fa parte delle cose che hai già letto puoi saltarlo, altrimenti leggilo! Designing for Responsiveness | Android Developers )

Altra cosa che bisogna chiarire, perché non capisco cosa intendi con questa frase:
Con il RUN lo si fa partire ma non è detto che parti subito.

Prima di tutto un Thread non si fa partire con il metodo run ma con il metodo start. Se lo fai partire con run (ovvero chiami tu direttamente il metodo) non stai facendo partire un nuovo thread!
Inoltre al 99% il thread parte immediatamente ed in modo parallelo a quello attualmente in esecuzione.

Il problema del recupero del 5 dalla pagina ASP:
questo dipende molto da come progetti la tua applicazione e che tipo di responsabilità dai al thread. Di sicuro il recupero fisico della pagina va fatto in un thread diverso da quello della UI per il problema del link di sopra. Il fatto che sia il thread a decidere cosa fare della pagina (ovvero la ricerca o meno del 5) è una tua scelta. Sinceramente io non lo farei fare al thread che ha recuperato la pagina ma a quello della UI (probabilmente devi aggiornare qualche cosa nell'interfaccia in base al fatto che la pagina contenga o meno il valore 5).

La tua frase (e continuo con la mia presunzione):
Il controllo non può farlo il THREAD principale perché viaggiando parallelamente e non avrebbe la stringa da controllare. GIUSTO?

mi fa capire che tra le tue letture qua e la ti sei dimenticato di leggerti questo link: Common Tasks and How to Do Them in Android | Android Developers dove ti viene spiegato come far comunicare due thread diversi per aggiornare la UI in un caso del tutto uguale al tuo.

Se ti sono sembrato troppo presuntuoso, sappi che proprio questa tua frase

Vi prego di non rispondermi leggiti qua o leggiti la, questo l'ho già fatto.
è molto più presuntuosa di tutto il mio post.

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Thread questo sconosciuto!
« Risposta #2 il: 10 Novembre 2010, 11:07:36 CET »
+1
ti rispondo semplicemente:
Per capire il perchè thread fa le cose e come, devi PER FORZA leggerti qualcosa riguardo agli OS e alla schedulazione dei processi, mi limito a dirti che essendoci una sola CPU, i processi non possono essere eseguiti effetivamente contemporaneamente, sarebbe come avere il dono dell'ubiquità, quindi il OS esegue un po e un po,dandoti l'impressione di eseguire le cose contemporaneamente.

riguardo a: Ma non capisco il motivo per cui devo mettere una parte di codice sotto THREAD ed i benefici che ne posso avere da questa operazione. (QUESTA é LA PRIMA DOMANDA)

E' semplice, non è che DEVI, ti conviene. Questo perchè il codice viene eseguito in maniera sequenziale, e l'UI si basa sulla sua activity principale, se te esegui un processo pesante, all'interno della UI, la UI andrà in attesa della fine del tuo processo, quindi l'utente che la usa la vedrà freezata. Se poi l'utente cerca di interagire, gli comparirà una shermata di attesa/terminazione dell'app (schifosa come cosa,no?)

Riguardo a:
Supponiamo di dover recuperare da una pagina ASP del valori e controllare se all'interno c'è il valore esempio 5
Devo tassativamente creare un THREAD che gestisca la connessione ed il recupero dei dati ma lo stesso THREAD deve fare anche il controllo del valore 5.
Il controllo non può farlo il THREAD principale perché viaggiando parallelamente e non avrebbe la stringa da controllare. GIUSTO?

Devi creare un thread che scarica i dati e li rende leggibili (nel tuo caso un int o Integer). Poi per poter fare qualcosa con questo dato (nella UI) devi passarlo indietro usando gli handler (qui ti devi leggere per forza le cose da te, è lunga da spiegare e la documentazione o il forum hanno gia degli esempi).
Una volta ritornato il valore all'interno dell'handler,te lo gestisci e lo mostri nell'UI.
ATTENZIONE: se il controllo del valore 5 richiede operazioni pesanti, tipo: cerca nel database,fai conti strani, altra connessione HTTP ecc, allora lo fai nel thread, se invece te devi fare tipo:
if (val==5) showAlert("Ho trovato 5")
else showAlert("5 non c'è")

allora non ha senso e non si può farlo nel thread, e lo fai usando l'handler.

spero di aver risolto i tuoi dubbi.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Thread questo sconosciuto!
« Risposta #3 il: 10 Novembre 2010, 11:54:14 CET »
0
Se sono sembrato presunzioso mi scuso.
Mi sono spiegato male, SICURAMENTE. :'( :'( :'(

Ma avete centrato in pieno quanto volevo.
Un aiuto chiaro e preciso.

Ora vado a leggermi quanto mi avete consigliato, lo dico veramente senza nessun sottinteso.

a dopo per le successive domande.
grazie ciao
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Thread questo sconosciuto!
« Risposta #4 il: 10 Novembre 2010, 12:02:35 CET »
0
Ora vado a leggermi quanto mi avete consigliato, lo dico veramente senza nessun sottinteso.

Tranquillo! Se hai altri problemi posta pure!  ;-)

Ciao!

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Thread questo sconosciuto!
« Risposta #5 il: 12 Novembre 2010, 17:18:08 CET »
0
tutto molto meglio ora. 8-)
Grazie ancora a tutti.
 ;-) ;-)


-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------