什么是回调函数(callback/listener)?

来源:http://www.zhihu.com/question/19801131

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。

在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。 

/**
 * 用来传输数据的回调接口;
 */
public interface DataListener{
	void onDataComplete(String result);
}

  

/**
 * 本类负责从服务器请求数据,然后把数据传递给相应的界面;
 */
public class DataFetcher{
	private DataListener listener;

	/**
	 * 注册监听器;
	 */
	public void setDataListener(DataListener listener){
		this.listener = listener;
	}

	/**
	 * 从服务器请求数据,请求成功回调接口;
	 */
	public void getDataFromServer(){
		new Thread(){
			public void run(){
				SystemClock.sleep(3000);
				listener.onDataComplete("onDataComplete");
			}
		}.start();
	}
}

  

public class MainActivity extends Activity implements DataListener{
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		DataFetcher fetcher = new DataFetcher();
		fetcher.setDataListener(this);
		fetcher.getDataFromServer();
	}

	@Override
	public void onDataComplete(final String result){
		this.runOnUiThread(new Runnable(){
			@Override
			public void run(){
				updateUi(result);
			}
		});
	}

	private void updateUi(String result){
		// update ui here
	}
}

  

posted @ 2015-08-14 10:31  好学人  阅读(1449)  评论(0)    收藏  举报