正确理解和使用回调方法

回调方法是一个很容易理解的方法,但是很多人讲解的时候混入了各种奇怪的概念所以导致回调方法很不清晰。我现在给大家讲解一下回调方法,讲的不对的地方欢迎大神指出。
我的主函数
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
glSurfaceView = new MyGLSurfaceView();
}
我在主函数创建了这个glSurface对象,至于这个对象是干什么的,传什么,大家都不用关心,总之我就是在主函数中创建了一个对象,然后传了一些参数进去。
然后这个glSurfaceView类里面又在执行各种复杂操作。
这个对象在它内部执行复杂操作的时候,我的主函数是看不到,也控制不到的。这个时候我们想要在glSurfaceViews中某个节点给我们主函数传数据,或者做什么,那是完全做不到的。所以我们要控制的话只能这样
Mainactivity mactivity;
glSurfaceView = new MyGLSurfaceView(mactivity);
然后在glSurfaceView的构造方法里面写
Mainactivity glSurfaceViewactivity=mactivity;
再写
glSurfaceView.xxxxxxx
这样就出现一个巨大的问题。
我们每次创建glSurfaceView的时候,是不是都会在里面创建一个activity,那你得把这个activity再里面使用以后又销毁。不然就会创建大量activity实例
要是activity里面有大量资源,毫无疑问,你的工程很快就会卡死
而且一些复杂程序,我们是根本看不见这个glSurfaceView里面的任何内容的,可能它是被完全封装好的。这个时候我们还想让它做了某件事的时候,去通知我们的activity,根本就不可能。
这个时候,我还想达成刚才的效果,就不得不引入回调函数了。
回调函数是干什么的呢,其实很简单,就是我在glSurfaceView这个函数里面做什么的时候,我给它一个标记。每当这个标记执行到的时候,别的函数就可以做一些别的事情了,你可以将它理解为一个通知,通知其他函数,我的事情做完了,或者我做了这件事情了,现在来做你的事情了。

 public interface Callback{
        void start();
        void stop();
    }

    private Callback mCallback;
    public void setCallback(Callback callback){
        mCallback = callback;
    }

先在glSurfacaView里面定义一个接口,在里面写上你要设置回调的地方

@Override
public void onPrepared(MediaPlayer mp) {

       if(mCallback!=null){
            mCallback.start();

        }
    }

public void stop() {

        if(mCallback != null){
            mCallback.stop();

        }

      }
      这样当这两个方法执行的时候,就可以执行我们的回调了。

在glSurfaceView初始化的时候写上如下语句
xxx.setcallback()
最后mainActivity继承glSurfaceView.callback
在自动生成的方法里面写stop和start里面你要做什么,在对应的时候就能实现这个操作了
现在很多封装的程序都给你再很多地方留下了回调的接口,你不可能去修改对应的程序,但是通过修改各种接口,就可以修改对应的地方

总结
接口就是A函数在B函数中调用A函数的方法,听起来很绕,其实就是我们没法同时控制两个函数,所以只能在第二个函数做了某些事情的时候给它设置一个节点,在这个节点我们我们可以在别的函数执行其他操作。
理解回调千万不要混入异步的概念,网络上面很多讲解回调的文章往往喜欢混入异步的概念,导致读者无法正确理解回调

猜你喜欢

转载自blog.csdn.net/qq_36740186/article/details/76436071
今日推荐