Ce este callback în Android? [duplicat] (Programare, Java, Android)

Hammad Shahid a intrebat.

Vreau să înțeleg conceptul de callback. Am căutat pe internet despre callback-uri și există multe exemple care folosesc interfața, iar o clasă apelează o metodă a altei clase folosind acea interfață. Dar tot nu reușesc să înțeleg conceptul principal de callback, care este scopul utilizării callback-urilor?

Comentarii

  • Link : developer.android.com/guide/faq/… –  > Por Vaibhav Jain.
  • Aceasta este o modalitate de a implementa lambdas în Java, deoarece acestea nu sunt acceptate până la Java 8. –  > Por Boris Păianjenul.
6 răspunsuri
Steve Benett

Aici este un frumos tutorial, care descrie bine callback-urile și cazul de utilizare.

Conceptul de callback-uri este de a informa o clasă sincronă / asincronă dacă se face o anumită muncă într-o altă clasă. Unii îl numesc principiul Hollywood: „Nu ne chemați pe noi, noi vă chemăm pe voi”.

Iată un exemplu:

class A implements ICallback {
     MyObject o;
     B b = new B(this, someParameter);

     @Override
     public void callback(MyObject o){
           this.o = o;
     }
}

class B {
     ICallback ic;
     B(ICallback ic, someParameter){
         this.ic = ic;
     }

    new Thread(new Runnable(){
         public void run(){
             // some calculation
             ic.callback(myObject)
         }
    }).start(); 
}

interface ICallback{
    public void callback(MyObject o);
}

Clasa A apelează clasa B pentru a obține o anumită activitate într-un Thread. În cazul în care Thread-ul a finalizat activitatea, va informa clasa A prin callback și va furniza rezultatele. Așadar, nu este nevoie de o interogare sau altceva. Veți primi rezultatele imediat ce acestea sunt disponibile.

În Android, callback-urile sunt utilizate, de exemplu, între activități și fragmente. Deoarece fragmentele ar trebui să fie modulare, puteți defini un callback în fragment pentru a apela metodele din activitate.

Comentarii

  • Mulțumesc mult, acum am o idee despre callback-uri –  > Por Hammad Shahid.
  • Mulțumesc mult…A fost un exemplu foarte simplu și frumos…. –  > Por Mukesh Garg.
Boris Mocialov

Mai întâi creați o interfață, apoi definiți o metodă, care ar acționa ca un callback. În acest exemplu, vom avea două clase, una clasaA și o alta clasaB

Interfață:

public interface OnCustomEventListener{
  public void onEvent();   //method, which can have parameters
}

ascultătorul însuși în clasaB (setați doar ascultătorul în clasaB).

private OnCustomEventListener mListener; //listener field

//setting the listener
public void setCustomEventListener(OnCustomEventListener eventListener) {
   this.mListener=eventListener;
}

în clasaA, modul în care începem să ascultăm tot ceea ce are de spus clasaB

classB.setCustomEventListener(new OnCustomEventListener(){
    public void onEvent(){
       //do whatever you want to do when the event is performed.
    }
});  

cum declanșăm un eveniment din clasaB (de exemplu, la apăsarea unui buton)

if(this.mListener!=null){
   this.mListener.onEvent();
}

P.S. Ascultătorul dvs. personalizat poate avea oricât de mulți parametri doriți.

Sursa

Comentarii

  • Acest lucru este destul de util – dar am o întrebare… în cazul de mai sus, clasa B definește ascultătorul, ceea ce ar însemna că orice clasă care dorește să asculte evenimentul trebuie să creeze un nou obiect B și apoi să apeleze metoda. de exemplu – din clasa A –> B b = new B(); b.setCustomEventListener(this); în mod similar, din clasa D/clasa E B b = new B(); b.setCustomEventListener(this); Există vreo modalitate prin care pot evita crearea obiectului B în toate clasele în care vreau să ascult? –  > Por akash89.
Nargis

Callback-ul poate fi foarte util în Java.

Folosind Callback puteți notifica o altă clasă despre o acțiune asincronă care s-a finalizat cu succes sau eroare.

Orhun Mert Simsek

A fost discutat înainte aici.

În programarea calculatoarelor, un callback este o bucată de cod executabil care este transmisă ca argument unui alt cod, care se așteaptă să recheme înapoi (să execute) argumentul la un moment convenabil. Invocarea poate fi imediată, ca în cazul unui callback sincron, sau poate avea loc mai târziu, ca în cazul unui callback asincron.

keerthana murugesan

CallBack Interface sunt utilizate pentru Fragment la Fragment comunicare în android.

Consultați aici pentru a înțelege.

utilizator529543

Folosesc în următorul caz:În UI am primit o acțiune de la un buton, de exemplu, utilizatorul dorește să descarce un fișier de 500mb.Mulțumesc că voi inițializa motorul de fundal (clasa AsyncTask) și îi voi trece parametrii.În UI voi afișa un dialog de progres de blocare și voi împiedica utilizatorul să facă orice alte clicuri. Întrebarea este: când să elimin blocajul din UI? răspunsul este: când motorul a terminat cu succes sau eșec, iar asta poate fi cu callback-uri sau notificări.

Care este diferența dintre notificare și callback-uri este o altă întrebare, dar 1:1 este mai rapid callback-ul.