当前位置: 代码迷 >> Android >> Android自学进程—回调函数的意思(源码+例子)
  详细解决方案

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

热度:100   发布时间:2016-04-27 23:13:30.0
Android自学历程—回调函数的意思(源码+例子)

  为什么会学习回调函数,那还要从线程说起。虽然以前写过一篇文章叫做“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 [email protected] 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

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

 

 

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

 

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

 

无意间回头看了看自己写的内容,似乎逻辑不强。我承认问题没有突出来。

 

1楼Appfortify
哎呦不错哦,推荐一个免费提供开发者使用的好平台,百度一下“app安全云”。
  相关解决方案