android 面试准备 DAY6 10.22 回调

回调分为同步回调和异步回调。

java和android开发中,回调的应用无处不在,下面就以android中的点击事件为例子写一个回调的例子。监听按钮的点击事件,然后实现点击事件。回调具体的描述网上有很多的说法,但是看完都晕晕乎乎的,来个实际的例子说明回调吧。

异步回调的例子如下所示:

public class ClickController {
    private static ClickController instance;
    private ArrayList<ClickListener> list = new ArrayList();
    
    private ClickController() {
        
    }
    public static ClickController getInstance() {
        if (instance == null) {
            instance = new ClickController();
        }
        return instance;
        
    }   
    public void registerClickListener(ClickListener listener) {

        if (listener != null) {
            list.add(listener);
        }
    }
    
    public void removeClickListener(ClickListener listener) {
        if (listener != null) {
            list.remove(listener);
        }
    }
    
    //调用回调方法
    public void click(boolean isLong) {
        for(ClickListener listener:list) {
            if (isLong) {
                listener.onLongClick();
            }else {
                listener.onClick();
            }
        }
    }

}

 

public class ClickManager implements ClickListener{
    ClickController controller;
    public void init() {
        controller = ClickController.getInstance();
        controller.registerClickListener(this);
    }

    //实现回调方法
    @Override
    public void onClick() {
        // TODO 我这儿可以点击按钮去播放音乐,也可以去暂停音乐
        System.out.println(Thread.currentThread()+"点击按钮");
    }

    @Override
    public void onLongClick() {
        // TODO 这儿可以去收藏音乐,或者取消收藏音乐
        System.out.println(Thread.currentThread()+"长按按钮");
    }
    
    public static void main(String[] args) {
        System.out.println(Thread.currentThread());
        ClickManager manager = new ClickManager();
        manager.init();
        
        //这里开启一个线程用异步的方式实现按钮的长按点击事件,
        //实际实现中肯定使用了屏幕的触摸事件等去判断点击了某个按钮,
        //这儿只是做一个模拟。去调用回调方法。
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                ClickController.getInstance().click(true);
            }
        }).start();
        
        //这里开启一个线程用异步的方式实现按钮的短按点击事件
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                ClickController.getInstance().click(false);
            }
        }).start();
    
    }

}


public interface ClickListener {
    void onClick();
    
    void onLongClick();

}

 

运行结果为:

Thread[main,5,main]
Thread[Thread-0,5,main]长按按钮
Thread[Thread-1,5,main]点击按钮

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值