android 异步回调机制

来源:互联网 发布:美工抠图是用什么软件 编辑:程序博客网 时间:2024/05/10 02:36

android事件处理:
基于监听,基于回调。
基于监听,是为android界面组件绑定特定的事件监听器。主要处理一些特定的事件。
基于回调,时重写android组件特定的回调方法,或者重写activity的回调方法。android为绝大部分界面组件都提供了事件响应的回调方法。可以用于处理一些具有通用性的事件。

对于基于监听的事件处理模型来说,事件源和事件监听器是分离的,当事件源上发生特定事件之后,该事件交给事件监听器负责处理,对于基于回调的事件处理模型来说,事件源和事件监听器时统一的,当时间源发生特定事件之后,该事件还是有事件源本身负责处理。
例如:boolean onKeyMultiple(int keyCode,int repeateCount,KeyEvent event)用于响应按键重复点击。官方API支出,它总是返回false,没有handle,必须重写才能实现。

委托机制需要事件源,事件和监听。而回调机制难以理解,网上通俗的说法是:A类持有B类引用,A调用B的方法C,然后B类中反过来调用A类中的方法D,D就叫回调方法。其实D正是回调接口中的方法。

根据这种思路的理解,我写了个简单的示例,方便自己了解。

A有一个策划方案,需要B去完成。B还有其他工作要做,只有做完了才能去做这个策划方案。B完成策划方案后,调用A的方法,把方案交给A。

A类:需要实现回调接口,并调用B的一个方法

    public class A implements CallBack{          /**           * A类持有B类的一个引用           */          private B b;          public A(B b){              this.b=b;          }          /**           * 执行异步任务的方法           * @param ask           */                    public void ask(final String ask){              //模拟异步任务,同时进行两项任务              new Thread(new Runnable() {                        @Override                  public void run() {                      //1   调用B类方法,完成获取方案                      b.excuteMessage(A.this, ask);                      //2   执行其他任务                      task();                  }              }).start();          }          /**           * 其他任务           */          public void task(){              System.out.println("---------");          }                /**           * 得到解决方案           * 回调方法           */          @Override          public void sovle(String result) {              System.out.println(result);          }      }  

B类:被调用的方法需要带有一个回调接口的参数,并调用A类的一个方法(回调方法)

    public class B {                /**           * 接口做参数的方法           * @param cb 回调接口           * @param ask 问题           */          public void excuteMessage(CallBack cb,String ask){              System.out.println("问题是:"+ask);              //经过一段时间,方案已产生              String result = "方案1";              //B类中反过来调用A类中的方法              cb.sovle(result);          }      }  

回调接口:
    /**       * 回调接口       * @author DB       *       */      public interface CallBack {                /**           * 回调方法           * @param result           */          public void sovle(String result);      }  

main:
public class Test {        public static void main(String[] args) {          B b = new B();//B类注册回调方法          A a = new A(b);//A类实现回调接口          //A类引用调用自身方法          a.ask("ask");      }  }  
0 0
原创粉丝点击