El principio y la interpretación del mecanismo de devolución de llamada de Java y ejemplos

Cuando miré el código hoy, descubrí que no entendía claramente la devolución de llamada, así que estudiaré los detalles y veré los escenarios de la aplicación.

1. El mejor escenario para devoluciones de llamada. Se aplica a la llamada de comunicación asíncrona, es decir, para llamar a una determinada función. No sé cuándo habrá resultado, pero el llamante necesita saber el resultado.  

El maestro le pide a alguien que haga el trabajo. El trabajador debe responder a la situación de trabajo. Esto es asincrónico.  

La tecnología java implementa dos tipos. El maestro invita a las personas a trabajar ----- el maestro está esperando que la persona haga el trabajo ----- esta instancia maestra, como yo la llamo, siempre usa un hilo para monitorear el situación, es decir, el maestro se separa. Preguntaré cómo avanza el proyecto en un momento.

¿Qué tal la optimización de la CPU?  

 

El maestro invita a alguien a hacer el trabajo ----- Envíe a alguien a esperar al trabajador ----- Persona especial para uso exclusivo --- La devolución de llamada aquí es para que la use la persona especial. Nombrado la devolución de llamada --- en realidad el gerente del proyecto  

--- El director del proyecto quiere preguntar, ¿se realiza esta función? Para el propietario y el jefe, esta función está casi completa y el progreso es del 80%. Escriba una interfaz de devolución de llamada

 

 

 

          

package com.example.myapplication;

public interface IGetMessageCallBack {
    public void setMessage(String message);
}

 

package com.example.myapplication;

// 这里模拟网络传递下来的信息。。

public class updateMessage {
    private IGetMessageCallBack IGetMessageCallBack;

    public void setIGetMessageCallBack(IGetMessageCallBack IGetMessageCallBack){
        this.IGetMessageCallBack = IGetMessageCallBack;
    }

    public void updateMessage(String message){
        if (IGetMessageCallBack != null){
            IGetMessageCallBack.setMessage(message);
        }
    }
}

 

package com.example.myapplication;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity implements IGetMessageCallBack {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
//      现实中,老师与学生的 问问题  与回答问题  的场景 ,进行解析,使用 回调的方法,实现,解释 回调
//      的异步通讯,同步消息到其它的场景
//      老师问 学生  今天作业做了多久?  askQuestion
//      学生徐东答 老师  今天用时 3000秒
//      学生徐茨答 老师  今天用时 5000秒
//      学生徐蓉答 老师  今天用时 8000秒
//      回答 有先有后,有快有慢,如何实现。。。

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        updateMessage mupdateMessage = new updateMessage();
        mupdateMessage.setIGetMessageCallBack(MainActivity.this);
        for (int i = 0; i < 10 ;i++){
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            mupdateMessage.updateMessage("模拟发送消息。。。。");
        }


//        Student student_xuxiaodong = new Student_xuxiaodong();
//        Teacher teacherA = new Teacher(student_xuxiaodong);
//        Log.i("CallBack"," start AA  ....  " );
//        teacherA.askQuestion();
//
//        Student mStudent_XuChi = new Student_XuChi();
//        Teacher teacherB = new Teacher(mStudent_XuChi);
//        Log.i("CallBack"," start  BB  ....  " );
//        teacherB.askQuestion();
//
//        Student mStudent_XuRong = new Student_XuRong();
//        Teacher teacherC = new Teacher(mStudent_XuRong);
//        Log.i("CallBack"," start CC ....  " );
//        teacherC.askQuestion();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void setMessage(String message) {
        Log.i("CallBack","显示 消息,看看情况 " + message );
    }
}

 

其实,从这个例子看 ,回调就是一个c的全局变量 一个工程中的全局变量,不知有大神能搞清楚不?学习之、分析之、使用之

Supongo que te gusta

Origin blog.csdn.net/u010689853/article/details/113401959
Recomendado
Clasificación