关于 回调 、 反射 和异步的一些理解---初级知识

时间:2021-07-26 18:52:39

怎么说呢,一直都搞不动回调是个啥,和异步有啥关系,和反射又是怎么扯在一起的,今天特意查了一下资料,看了一些博客,知道了一些皮毛,现总结一下:

回调就是回调,和异步反射没有关系,要说有关系那也是在实现功能的时候会同时用到其中的一个或者多个机制(回调、异步和反射)。

 

模式一:回调

简单来说回调就是在两个人的和做过程中,A告诉B说我要实现功能需要你提供一些信息,然后在调用我给你的接口把信息反馈给我。

具体点:

A: 中有方法a1, a2a3等等。

B:中有方法b1b2b3等等。

Aa1方法中调用b1把自己的a2或者a3接口做为参数告诉BB在自己的b2方法中实现一些必要的工作,然后通过b1中保存过的名字去调用a2或者a3。这就是回调。

B中可能有一个用来保存Aa2a3名字的成员一般叫做callback(这个一般用在AB不处于同一个.cpp中或者不处于同一个java包中),不过建议最好是在A中有一个callback成员保存回调接口,这样子方便维护。

 

模式二:反射

对于反射,度娘是这么说的:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods

下面是网上某个博客上给出的总结,自己感觉不错:
  1Java反射的概念
  反射含义:可以获取正在运行的Java对象。
  2Java反射的功能
  1)可以判断运行时对象所属的类
  2)可以判断运行时对象所具有的成员变量和方法
  3)通过反射甚至可以调用到private的方法
  4)生成动态代理
  3、实现Java反射的类
  1)Class:它表示正在运行的Java应用程序中的类和接口
  2)Field:提供有关类或接口的属性信息,以及对它的动态访问权限
  3)Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
  4)Method:提供关于类或接口中某个方法信息
  注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)都需要它来实现
  4、编写Java反射程序的步骤:
  1)必须首先获取一个类的Class对象
  例如:
  Class c1 = Test.class;
  Class c2 = Class.forName(“com.reflection.Test”);
  Class c3 = new Test().getClass();
  2)然后分别调用Class对象中的方法来获取一个类的属性/方法/构造方法的结构
  注意:如果要能够正常的获取类中方法/属性/构造方法应该重点掌握如下的反射类
  Field
  Constructor
  Method

 

模式三:异步

  我的理解中:

异步是:我在处理事件A的时候需要你去处理事件B,而在你处理事件B的时候,我没有等待你返回结果,在继续做其他的事情。

同步是:我在处理A的时候告诉你去处理B,然后我开始等待,知道你处理完成后我才继续工作。

java中通常用于前台线程和后台线程这些逻辑上,一般性的耗时且和前台线程无关的操作,都需要以异步的方式放到后台线程去处理。与前台线程有关的放在前台线程中处理。

举例:

显示登陆界面:放在Ui线程里面:

public void showLoginView() {

        mainActivity.runOnUiThread(new Runnable() {

            @Override

            public void run() {

                m6_loginManager.mainLogin();

            }

        });

    }

其他的,如初始化:放在后台

public boolean init(GameActivity activity) {

        if (mainActivity == null) {

            mainActivity = activity;

            // 初始化bugly

            BuglyWrapper.initBugly(mainActivity);

            vngLib = this;

            regEnv();

            zaloAppid = "3812726063880482173";

            secretKey = "4EtOo3HhKC3R78D2f123";

            return true;

        }

        return false;

    }