码迷,mamicode.com
首页 > 移动开发 > 详细

Android自学历程—回调函数的意思(源码+例子)

时间:2015-08-31 17:02:37      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

  为什么会学习回调函数,那还要从线程说起。虽然以前写过一篇文章叫做“Android自学历程—多线程”,现在看看还是太年轻了。

  在学习线程的时候,我试着看了看Handler的源码,于是对其中的Callback接口产生了兴趣。于是补自身不足,拿来学习学习。废话到此为止,整理思路,一起来学习。

 

下面这是一段Handler的源码

    /**
     * Callback(回收) interface(界面) you can use when instantiating(例示) a Handler to avoid
     * having to implement(实施) your own subclass(亚纲) of Handler.
     *
     * @param msg A {@link android.os.Message Message} object
     * @return True if no further handling is desired
     */
    public interface Callback {
        public boolean handleMessage(Message msg);
    }
    
    /**
     * Subclasses(亚纲) must implement(实施) this to receive messages.
    */
    public void handleMessage(Message msg) {
    }

上面的中文翻译不是我翻译的,翻译软件干的好事,没一个对的。。。

 

Handler相信大家都用过,当我们实例化一个Handler时,大家都说我们要实现其中的方法,其实就是实现HandleMessage的方法。

我们再来看看源码,对此的实现方式。首先是Callback方法的接口,既然是接口,那我们就必须实现其中所有的方法,既“handleMessage”方法。

 

大家再看看上面我用红色标注的英文,是不是有了感觉,别急。我们再来找个例子看看。

下面是一段OnClickListener的源码

    /**
     * Interface definition for a callback to be invoked when a view is clicked.
     */
    public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
    }

 

我们来看一下红色标注的这段话:当一个View被点击时,这个接口定义的回调函数将会被触发。我们并不会显示的调用OnClick方法,用户触发了这个点击事件,系统会去调用这个OnClick方法。

我有顺路把setOnClickListener的源码找了过来,可能对后面有助于理解

    /**
     * Register a callback to be invoked when this view is clicked. If this view is not
     * clickable, it becomes clickable.
     *
     * @param l The callback that will run
     *
     * @see #setClickable(boolean)
     */
    public void setOnClickListener(OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        getListenerInfo().mOnClickListener = l;
    }

 

这里,我找到一个不错的教程,能让我们更好的理解:用代码,模拟注册事件监听器

先写一个监听器接口

package com.listener;  

/** 
 * 点击监听器接口 */  
public interface MyOnClickListener {  
    public void onClick();  
} 

 

 

写一个我们自己的Button类,实现点击效果。

package com.listener;  
    `
    public class MyButton {  
    private MyOnClickListener listener;  
      
    /** 
     * 设置具体点击监听器 
     * @param listener 点击监听器实现类 
     */  
    public void setOnClickListener(MyOnClickListener listener) {  
        this.listener = listener;  
    }  
      
    /** 
     * 按钮被点击 
     */  
    public void doClick() {  
        listener.onClick();  
    }  
} 

 

 

最后模拟Client端的注册监听器和触发点击操作。

package com.listener;  
  
publicclass Client {  
    public static void main(String[] args) {  
        MyButton button =new MyButton();  
        //注册监听器  
        button.setOnClickListener(new MyOnClickListener() {  
  
            @Override  
            public void onClick() {  
                System.out.println("按钮被点击了");  
                  
            }  
              
        });  
        //模拟用户点击  
        button.doClick();  
    }  
} 

 

这个我看了有一会,感受一下还是有感觉的。http://blog.csdn.net/jason0539/article/details/10168899

它的评论我截了几张图片,还是有不错的启发的。

技术分享

技术分享

 

 

当然我在知乎也找到了神级别的回答,共享之。

技术分享

 

好了,大概的了解后,我们可以继续后续的学习了。

 

Android自学历程—回调函数的意思(源码+例子)

标签:

原文地址:http://www.cnblogs.com/ryan-ys/p/4773070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!