Autore Topic: domanda teorica: "callback"  (Letto 2183 volte)

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
domanda teorica: "callback"
« il: 20 Settembre 2010, 17:52:10 CEST »
0
Ciao a tutti!
la mia domanda ha carattere piuttosto generale: dalla documentazione presente su http://developer.android.com come si fa a capire quali sono i metodi di callback per una determinata Activity(oltre a quelli tradizionali)?  per farmi capire mi aiuterò con un esempio tratto direttamente dal libro di Carli, (cap 7 pg 291):

-supponiamo di voler fare un animazione ed usare il package android.view.animation.Animation
-come scritto sul libro, possiamo utilizzare il metodo pubblico initialize() come callback di inizializzazione (rif del metodo: Animation | Android Developers)

allora la domanda è: chi ci assicura che un metodo sarà usato come callback, e dove si leggono i particolari metodi di callback di un applicazione?
e,giacchè ci siamo, su quale documentazione si trova il codice dei metodi già defininiti (esempio initialize())?

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:domanda teorica: "callback"
« Risposta #1 il: 20 Settembre 2010, 19:43:38 CEST »
+1
Provo a risponderti, probabilmente non come vorresti, esprimendo quella che è sostanzialmente una mia opinione.

Intanto (secondo me) la initialize di Animation non è una callback. Si parla di callback quando tu crei una funzione e la assegni in modo che venga richiamata (callback) in una particolare occasione. Esempio tipico è un Listener.

Ho letto il passo da te citato, dove il Carli dice più o meno: quando una animazione viene assegnata ad una View, viene invocato il metodo initialize, per cui possiamo usare initialize come se fosse la callback di inizializzazione.

Tornando alla tua domanda, questa è la mia risposta: Se non c'è scritto nella documentazione (e non l'ho trovato), l'unico altro modo di scoprire che initialize viene richiamata è leggersi i sorgenti di Android. Ecco perchè ti dico che, più che conoscere quali sono le callback (che solitamente vedi come Listener), qua si parla di conoscere i funzionamenti interni delle varie classi.

Ecco, questo è quello che so.  :-P
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:domanda teorica: "callback"
« Risposta #2 il: 22 Settembre 2010, 16:31:15 CEST »
0
mmmh.. io avevo capito che i metodi di callback fossero quei metodi che il sistema chiama automaticamente mentre svolge un Activity, ad esempio:
 onCreate(), on Start(), etc..rappresentano i passaggi di stato di un Activity e sono metodi chiamati dal sistema.. ecco perchè quando ho visto che iniialize() veniva usato come metodo di callback mi sono chiesto se esistono altri metodi che, a seconda di quale Activity si sta usando, il sistema chiama automaticamente..

..e dal sito developers.android.com dove si trovano i sorgenti?

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:domanda teorica: "callback"
« Risposta #3 il: 22 Settembre 2010, 16:42:23 CEST »
0
Direi che il suggerimento di bradipao non è una sua opinione ma un dato di fatto! ;)

I metodi di tipo callback sono quasi esclusivamente dei trigger (ovvero listener), cosa diversa sono onCreate, onStart (e compagnia bella) che non sono altro che metodi normalissimi che vengono chiamati in sequenza durate il ciclo di vita di una Activity e che puoi normalmente sovrascrivere (fare l'override) come qualsiasi altro metodo che te lo permette.

Non esiste quindi una lista di metodi di callback, ma proprio per quei metodi che citi esiste il ciclo di vita dell'activity che puoi consultare qui: Application Fundamentals | Android Developers

Per i sorgenti di android puoi trovarli qui: Welcome to Android | Android Open Source

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:domanda teorica: "callback"
« Risposta #4 il: 22 Settembre 2010, 17:33:12 CEST »
0
Citazione
proprio per quei metodi che citi esiste il ciclo di vita dell'activity

Sì sì questo mi era chiaro.. è il termine "callback "usato con questi metodi che lo è un pò meno

Credo che a farmi confusione sia stato il paragrafo del libro di Carli intitolato "I metodi di callback" (pg 114) Dove presenta il ciclo di vita di un applicazione e i metodi onCreate(),onStart() (etc).
Essendo questi metodi presentati in  questo paragrafo e non essendoci inclusi particolari listeners, avevo pensato che i metodi chiamati dal sistema in corrispondenza di un applicazione fossero quelli detti di "callback" .

(In pratica: come il sistema chiama automaticamente onCreate() per qualsiasi activity, pensavo che a questo punto chiamasse anche initialize() per le Animation.. ).

ma allora: se
Citazione
I metodi di tipo callback sono quasi esclusivamente dei trigger (ovvero listener), COSA DIVERSA sono onCreate, onStart (e compagnia bella)

..perchè Carli li descrive sotto un paragrafo intitolato: "i metodi di callback"? e tra l'altro fà anche un applicazione ("LifeCycleActivityTest") che commenta con un "..nella quale abbiamo fatto l'override di tutti i metodi di callback.."(pg 116) (e infatti c'è l'override di dei metodi da onCreate fino a onStop())?

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:domanda teorica: "callback"
« Risposta #5 il: 22 Settembre 2010, 18:46:27 CEST »
0
Allora, il problema è puramente filosofico/stilistico!

Il metodo onStart, ad esempio, può essere visto come metodo di callback se si intente "Il metodo da richiamare quando l'activity ritorna visibile". E' una definizione poco rigorosa che fa storcere il naso, ma può starci!

E' più naturale trovarla in metodi tipo "chiamataAsincrona(callback)", ovvero effettua una chiamata che non blocca il thread e quando finisci richiamami al metodo "callback". Un esempio su tutti esiste in android con startActivityForResult. In questo caso, infatti, il metodo callback relativo a startActivityForResult è il metodo onActivityResult della stessa attività.

Riassumendo:
richiami il metodo startActivityForResult, il thread non si blocca nella chiamata in attesa di un risultato ma va avanti. Appena la nuova attività chiamata finisce il suo ciclo di vita richiama-indietro (call-back appunto) il metodo onActivityResult dicendo di aver completato.

Riusciresti a fare lo stesso esempio con onCreate o onStart?  :-P

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:domanda teorica: "callback"
« Risposta #6 il: 22 Settembre 2010, 19:13:39 CEST »
0
MarcoDuff ha già estesamente spiegato il concetto.

Per aggiungere una cosa dal punto di vista filosofico. La callback, come anche dice il nome, è qualcosa che si associa al verbo richiamare, una funzione secondaria richiamata da una principale. L'ovverride di funzioni tipo initialize è (a mio parere) impropriamente chiamata callback, perchè non è che richiama una funzione esterna, viene proprio ridefinita (override) la funzione principale.

Una differenza pratica è che (in linea di principio) le callback "pure" possono essere facilmente cambiate a runtime, basta che tu associ un listener diverso.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:domanda teorica: "callback"
« Risposta #7 il: 23 Settembre 2010, 12:37:47 CEST »
0
 il problema che stiamo trattando è assolutamente di stampo filosofico/stilistico!  :-P

Comunque ora ho capito per cosa voi intendete callback... ma, siccome in questo momento sto considerando il libro di Carli come la bibbia di Android,
sono stato portato a pensare che per callback si intendesse un metodo "chiamato dietro" o "richiamato" dal sistema.. che tra l'altro, vista così ci stà!

Ad ogni modo, magari le 2 interpretazioni sono entrambe giuste o magari no.. a dirvi la verità il dubbio mi rimane! (Per farvi un esempio se voi leggete anche il paragrafo sui Service e sul loro ciclo di vita dice "...esiste un loro ciclo di vita con dei relativi metodi di callback.." (pg 400)che poi descrive come per le Activity) Voglio dire: ho capito e condivido la vostra spiegazione ma.. se è scritto su quel libro qualcosa vorrà dire!

Grazie delle vostre risposte!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:domanda teorica: "callback"
« Risposta #8 il: 23 Settembre 2010, 13:06:11 CEST »
0
Lo scopo di una funziona di callback è di "agganciare" del codice nel workflow dell'esecuzione. Questo permette ad esempio di reagire con la nostra logica alla pressione di un bottone oppure, in modo analogo, di definire cosa deve fare un Service o un'Activity quando viene creata, avviata o fermata. Quello che cambia è il modo in cui viene definito questo comportamento. Il primo caso è adatto quando andiamo ad utilizzare classi che non sono scritte pre-fatte, il secondo è più adatto quando scriviamo le nostre classi a partire da classi già fatte.

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:domanda teorica: "callback"
« Risposta #9 il: 23 Settembre 2010, 14:08:45 CEST »
0
in questo momento sto considerando il libro di Carli come la bibbia di Android

Questo, IMHO, è il problema! Non riesco a considerare la bibbia di android neppure la documentazione ufficiale, figuriamoci un libro scritto da terzi. Sto leggendo anche io quel libro, è un buon libro su android ma sicuramente non è la bibbia.

Non considero la bibbia nemmeno wikipedia, ma la definizione che da di callback penso sia ottima:
Citazione
In computer programming, a callback is a reference to executable code, or a piece of executable code, that is passed as an argument to other code. This allows a lower-level software layer to call a subroutine (or function) defined in a higher-level layer.