android 异步回调机制

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值