Android接口回调(笔记)

目录

回调定义

正式定义

通俗定义

更通俗解释:

回调机制

回调意义

接口回调的实现步骤

1.首先定义一个回调接口。(就是在Andorid Studio里面新建java,选择interface)

2.定义一个接口帮助类,接口帮助类有方法里面有个参数以是这个接口类型的

3、具体调用类,及通过接口传递数据,主Activity。


网上看了一堆,感觉有点零散,我自己总结一下。

回调定义

正式定义

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript、Java等编程语言中可以使用仿函数或匿名函数。

通俗定义

在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
如下图:

s


更通俗解释:

  1. 小明写作业,遇到一道证明题,证明矩阵是正定的,但是小明不会啊,咋办呢?他就打了个电话给小红。
  2. xm:这个证明题怎么做啊?
  3. 但是小红的作业中并没有这道题.
  4. xh:你等我思考出来再告诉你。
  5. 小明听完后愉快地开机打游戏去了,约莫10分钟过去了,来电铃声突然想起,吓得小明手一抖就game over了,拿起手机一看,这不是小红嘛。
  6. xh:这道题的解决方法我消息发给你了。
  7. 于是乎salty fish小明就这样写完了作业。


回调机制

⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

回调意义

方法回调是功能定义和功能分离的一种手段,是一种松耦合的设计思想。在JAVA中回调是通过接口来实现的。作为一种系统架构,必须要有自己的运行环境,并且要提供用户的实现接口。
接口(系统框架)是系统提供的,接口的实现是用户实现的。这样可以达到接口统一,实现不同。系统通过在不同的状态“回调”我们的实现类,来达到接口和实现的分离。

接口回调的实现步骤

1.首先定义一个回调接口。(就是在Andorid Studio里面新建java,选择interface)

package com.example.simplelayout;
//定义一个接口
public interface CallBack {
    void solution(String str);
    //可以在主类(MainActivity)里面重写这个接口函数
}

2.定义一个接口帮助类,接口帮助类有方法里面有个参数以是这个接口类型的

package com.example.simplelayout;
//接口帮助类
public class CallBackUtil {
    //调用接口
    private static CallBack cal;
    public static  void setCallBack(CallBack cbk){
        cal=cbk;
    }
    public static  void doCallBack(){
        String info="you have done this!";
        cal.solution(info);
    }
}

3、具体调用类,及通过接口传递数据,主Activity。

package com.example.simplelayout;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.os.Handler;

public class MainActivity extends AppCompatActivity implements CallBack {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CallBackUtil.setCallBack(this);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                CallBackUtil.doCallBack();
            }
        }, 1000);
    }
    @Override
    public void solution(String string) {
        Log.e("Enoment", "receive method from CallBackUtil" + string);
    }
}


参考
博客https://blog.csdn.net/u010566681/article/details/52371359

脚本之家
https://www.jb51.net/article/74194.htm
————————————————
转载于:https://blog.csdn.net/qq_43738932/article/details/118787289

猜你喜欢

转载自blog.csdn.net/weixin_42602900/article/details/128256193