English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Comprender profundamente el mecanismo de retroalimentación de interfaces en Android

Al principio, no entendí bien este mecanismo, ahora reorganizo mis ideas. En el desarrollo, la devolución de llamada de la interfaz es algo que usamos a menudo.

El significado de la devolución de llamada de la interfaz es que no se ejecuta inmediatamente después del registro, sino que se activa en un momento oportuno.

Primero, resolvamos qué es el devolverse:

Por ejemplo: un día, llamé para pedirte ayuda con un problema, por supuesto, un problema difícil, no puedes encontrar una solución de inmediato, y no puedo esperar allí con el teléfono, así que acordamos: espera a que encuentres una solución y llámame al teléfono, así que colgué el teléfono para hacer otras cosas. Después de XX minutos, mi teléfono sonó, y te sientes muy contento diciendo que el problema ya está resuelto, debe ser así.

 

C no se llama a sí mismo b, el propósito de C de proporcionar b es permitir que S lo llame, y C tiene que proporcionar. S no sabe qué es lo que C proporciona, por lo que S acuerda con la especificación de la interfaz de b (prototipo de función), y luego C le informa a S anticipadamente a través de una función r que va a usar la función b (es decir, registrar). r es la función de registro.

En resumen: una función de devolución de llamada es una función reservada para llamadas del sistema, y generalmente sabemos cuándo se llama a esta función, por lo que continuamos mejorando el gráfico anterior.

Mientras miramos esta imagen, en realidad nos damos cuenta de que en la vida diaria hay muchas ideas de callback. Muchos pensamientos de software son solo una conversión de nuestra forma de pensar en la vida real.

La primera cosa que hacemos al responder a un examen es escribir nuestro número de matrícula y nombre. Aquí要注意,我们填写学号和姓名不是给自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统将来调用),这其实就是一个回调的应用。老师提供接口(输入姓名,学号规则),我们利用接口注册。

Después de ver el pequeño ejemplo anterior, tienes una idea de callback, volvemos al ejemplo al principio del artículo.

Ese ejemplo ilustra "asincrónico+patrón de programación de "callback". Donde, más tarde me dijiste el resultado por teléfono es un proceso de "callback"; Mi número de teléfono debe haberse dicho antes, esto es registrar la función de callback; Mi número de teléfono debe ser válido y el teléfono debe poder recibir tu llamada, esto es lo que debe cumplir con la especificación de la interfaz de la función de callback.

Ya conocemos aproximadamente el flujo básico de callback, ahora veamos el uso básico de callback en Android.

Escena uno:

Button button = (Button)this.findViewById(R.id.button);  
button.setOnClickListener(new Button.OnClickListener() {  
  //función de callback  
  @Override  
  public void onClick(View v) {  
   buttonTextView.setText("El botón fue presionado");  
  }  
});  

El código anterior agrega un observador de eventos al botón, que es una de las aplicaciones más comunes de callback. No llamamos explícitamente al método onClick. Después de que el usuario dispara el evento de clic del botón, lo llama automáticamente el sistema de Android.

Escena dos:

@Override  
public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(saveInstanceState);  
  // Tu código...  
}  
@Override  
public void onResume() {  
  super.onResume();  
  // Tu código...  
}  

El ciclo de vida completo de Activity básicamente se basa en la función de callback.

Vimos dos formas comunes de uso de callback que utilizamos, primero haremos un resumen de los métodos básicos de uso de callback en Android. En realidad, solo se tradujo nuestra imagen.

--tu clase--

paquete lin.callback.test; 
public class You implements Runnable{}} 
  private String who; 
   private ContactInterface callBack;  
   public You() { 
      // TODO Auto-generated constructor stub 
   } 
  //Llamar a este método significa que alguien te ha contactado, regístrate aquí 
   public void setCallBack(String who, String question, ContactInterface callBack) { 
     this.who = who;   
     System.out.println("Dices: La persona que me ha contactado es ")+who+", la pregunta es"+question); 
     this.callBack = callBack; 
   } 
   public void handleThings(){ 
     //Supongamos que ahora estás pensando en la respuesta a un problema y necesitas un poco de tiempo 
     for(int i=0;i<100000;i++){  
        if(i == 0){ 
          System.out.println("Estás pensando en el problema....."); 
        } 
     } 
     String answer = "La respuesta es A"; 
     //He encontrado una manera de abordar el problema 
     System.out.println("Dices: He encontrado la respuesta, estoy listo para llamar a ")+who+"Dile la respuesta"); 
     callBack.callBackByTel(answer); 
   } 
  /* (non-Javadoc) 
   * @see java.lang.Runnable#run() 
   */ 
  @Override 
  public void run() { 
    try { 
      Thread.sleep(1000); 
      handleThings(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  }  
} 

--Mi clase--

public class Me { 
   public static void main(String[] args){  
     Me me = new Me(); 
     me.hasQuestion(); 
   } 
   private void hasQuestion(){ 
     //Ahora no puedo encontrar la respuesta y quiero preguntarte 
     You you = new You(); 
     you.setCallBack("Ameixa", "¿Cuál es la respuesta a la pregunta?", new ContactInterface() { 
      @Override 
      public void callBackByTel(String answer) { 
        System.out.println("Digo: bueno, está bien, he recibido la respuesta: ")+answer+", gracias "); 
      } 
    }); 
    //Recibes una llamada telefónica, te levantas y begins a pensar en el problema 
    new Thread(you).start(); 
   } 
} 

--Clase de interfaz (especificación)--

public interface ContactInterface { 
  public void callBackByTel(String answer); 
} 

Verificación de resultados:

Dices: la persona que me ha contactado es la caracola, el problema es ¿cuál es la respuesta a cierta pregunta?
Estás pensando en el problema
Dices: he pensado en el problema, estoy preparado para llamar de vuelta a la caracola para decirle la respuesta
Digo: bueno, está bien, he recibido la respuesta: la respuesta es A, gracias

Reflexiones profundas sobre las devoluciones de llamada:

La esencia del programa es el salto de código, ya sea sincrono, asíncrono, reflexivo, interfaz de función virtual, esencialmente son llamadas a funciones. Necesitamos llamar a la función, por lo que necesitamos su puntero, diferentes lenguajes obtienen este puntero de diferentes formas. Lo que definimos como interfaz es realmente un puntero a función, por lo que ese proceso de registro es equivalente a asignar un valor a ese puntero a función. Llamamos a la función de implementación definida por nosotros a través de ese puntero a función.

Esto es todo el contenido del artículo, espero que sea útil para su aprendizaje y que todos nos apoyen y alentemos el tutorial de clamor.

Declaración: el contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume responsabilidad por responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará