android学习笔记——回调机制
来源:互联网 发布:网络兼职有哪些 编辑:程序博客网 时间:2024/06/06 00:19
http://blog.csdn.net/xiaanming/article/details/8703708/ 博主好厉害!终于是在这里看了个明白什么是回调机制。
说下自己的理解,方便以后回顾
首先需要有一个接口,在其中写一个方法。
要有两个类ClassA和ClassB
ClassA中有ClassB的成员对象(也就是ClassA的对象中会包含ClassB这个类的对象,我们想要让B去做一些操作时,就可以直接调用B中的方法了,记得要把接口参数传进去,方便回来。)
ClassB中在实现特定的需要用到的方法时需要 接口参数 (目的就是为了在方法执行完之后,去调用接口中的方法,因为接口是在A中实现的,所以会回到A去)
在ClassA中实现了接口中的方法,为了收到从B方向发回的执行结果。
(上述的过程可以是异步的,也可以是同步的,建议先用异步操作的方式去理解,然后再回过头来思考同步的使用情况,看上述连接!)
下面用一个例子来解释一下回调
先来说一下背景,当我们需要去访问网页向服务器发出请求时,服务器有时不能立即响应我们的请求,而我们程序也不能一直停留等待,还需要做更重要的别的操作。所以,我们需要让子线程去访问服务器,当服务器发回我们所要的信息时,子线程再来通知我们,信息回来了,可以做相应的操作了。那么,子线程来通知主线程的这个动作就是回调机制。(不知道这么理解有没有错)
完成这要的操作需要基本的几个组件
1.ClassA 实现了回调用到的接口,包含ClassB的成员对象,还需要实现接口(也就是回调时 调用的方法)执行对应操作
2.ClassB 做访问服务器的操作,在子线程中进行,当服务器返回结果后通过接口 告知ClassA,执行后续操作。
3.定义好接口。
先做一下接口部分
HttpCallbackListener:
public interface HttpCallbackListener {
void onFinish(String response);
void onError(Exception e);
void onFinish(String response);
void onError(Exception e);
}
再做一下ClassB的内容
HttpUtil:
public class HttpUtil {
public static void sendHttpRequest(final String address , final HttpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try{
URL url = new URL(address);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null){
response.append(line);
}
if (listener != null){
//回调onFinish方法
listener.onFinish(response.toString());
}
}catch (Exception e){
//回调onError方法
listener.onError(e);
}finally {
if (connection != null){
connection.disconnect();
}
}
}
}).start();
}
}
public static void sendHttpRequest(final String address , final HttpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try{
URL url = new URL(address);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null){
response.append(line);
}
if (listener != null){
//回调onFinish方法
listener.onFinish(response.toString());
}
}catch (Exception e){
//回调onError方法
listener.onError(e);
}finally {
if (connection != null){
connection.disconnect();
}
}
}
}).start();
}
}
最后我们再来看一下ClassA中要做的事
在A中定义好了B的一个成员变量后
//传入ClassA的对象MainActivity.this 是因为MainActivity实现了HttpCallbackListener这个接口,在回调时就会回到ClassA中
httpUtil.sendHttpRequest("http://www.baidu.com",MainActivity.this);
以上就是我的一些对回调机制的理解了。如果有哪里不对请各位一定指出,大家多交流学习!多谢!
0 0
- android学习笔记——回调机制
- Android学习笔记——广播机制
- Android学习笔记——广播机制
- android学习笔记——浅析android消息处理机制
- Android学习笔记14——Broadcast机制(一)
- Android学习笔记15——Broadcast机制(二)
- Android学习笔记(十一)——广播机制
- 转载——Android Activity和Intent机制学习笔记
- Android群英传学习笔记——动画机制
- Android学习笔记— 事件处理机制(一)
- Android学习笔记— 事件处理机制(一)
- Android学习笔记— 事件处理机制(一)
- Android学习笔记--事件机制
- android学习笔记---广播机制
- android广播机制学习笔记
- 学习笔记---Android Handler机制
- Android学习笔记-广播机制
- Android学习笔记-广播机制
- VirtualBox在Linux下安装增强功能时出错
- html页面优化
- 在ubuntu中配置SSH(解决connect to host localhost port 22: Connection refused问题)
- 文章标题
- NuttX_编译系统分析
- android学习笔记——回调机制
- 结合Scikit-learn介绍几种常用的特征选择方法
- 错误票据
- Java 中有三大支柱
- 关于浏览器兼容问题
- android学习笔记——Intent的解析(Intent的隐式调用)
- 工具效率 使用Windows计划任务更新SVN
- JS实现-DIV自动居中代码
- android学习笔记——Localtion服务之LocationManager