zoukankan      html  css  js  c++  java
  • Android中callback(接口回调)机制

    事实上,callback 机制在Android 中无处不在,特别是以Handler、Callback、Listener这三个词结尾的,都是利用callback机制来实现的。比方点击事件onClickListener就是一个已经封装好的callback案例:


    tv.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    
    			}
    		});


    对于callback的概念及意义。维基百科是这么解释:将一段代码作为參数传递,而这段代码将会在某个时刻被运行;

    
    个人理解就是:为了代码整洁。为了方便调用并运行一些不在同一个java文件里的变量和函数;为了便于对外留出接口,便于后期加入新功能;
    

    自己也写了一个比較简单的Demo例如以下:

    /**
     * @author Kern
     * @data 2015-6-12下午4:21:29
     * @TODO callback 首先:定义一个interface 包括一个或者多个没有方法体的回调方法
     */
    public class MainActivity extends ActionBarActivity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		// TextView tv = (TextView) findViewById(R.id.tv);
    		// tv.setOnClickListener(new OnClickListener() {
    		//
    		// @Override
    		// public void onClick(View v) {
    		// // TODO Auto-generated method stub
    		//
    		// }
    		// });
    
    		Utils utils = new Utils();
    		utils.execu(new ContrlListener() {
    
    			@Override
    			public void contrl(String str) {
    				// TODO Auto-generated method stub
    
    				Log.e("sos", str);
    
    			}
    		});
    
    	}
    
    	//定义接口
    	public interface ContrlListener {
    
    		public void contrl(String str);
    	}
    }
    

    这里:接口ContrlListener中的方法 contrl(String str);没有方法体,后期维护中,须要新增功能时,就能够直接复写control函数。方法体中调用自己新增的功能实现代码就OK了。


    /**
     * @author Kern
     * @data 2015-6-12下午5:07:21
     * @TODO   第二步:获取接口对象,通过对象调用方法,
     * 			
     */
    public class Utils {
    
    	ContrlListener listener;
    
    	public void execu(ContrlListener listener) {
    
    		this.listener = listener;
    
    		new MyThread().start();
    	}
    
    	class MyThread extends Thread {
    
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			super.run();
    
    			try {
    				Thread.sleep(5000);
    
    				for (int i = 0; i < 10; i++) {
    
    					listener.contrl("电话正在接通中----" + i + 1);
    					Thread.sleep(3000);
    				}
    
    				listener.contrl("hello,你哪位?");
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    }


    
    
  • 相关阅读:
    Microsoft SQL Server 2008 基本安装说明
    微软的招聘哲学——做微软人的五大核心素质
    大型网站性能优化的通用方法
    模型驱动的开发,回忆一年多前的一次开发
    远离客户陷阱小故事 转
    单例模式(Singleton)
    真的很高兴,就在今天“博客园团队”为我们开通了 “CSLA 团队”
    桥接模式(Bridge)与合成/聚合复用原则(CARP)
    2009年11月11日
    虚拟化的好处 随笔
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5076349.html
Copyright © 2011-2022 走看看