您的位置:首页 > 移动开发 > Android开发

Android_Handler实现异步回调加载数据

2016-04-18 18:00 525 查看
在学习怎么使用Handler机制来达到这些效果之前,最好还是对Handler机制、异步通信、同步通信有一个了解,前面发表过一篇博客是关于Handler机制讲解的:/content/8192878.html

在开发中,我们经常会碰到这类问题:

1、网络访问,面对请求反馈处理数据和UI

2、我们开启了一个Adapder类,但是在item里的操作需要刷新界面,这个时候我们通常是在Adapter执行监听操作,在主界面的UI类里刷新界面,怎样传递这个信息?

3、我们经常会开启一个类似dialog, PopupWindow等控件之后,里面的操作需要我们刷新主界面

4、开启倒计时

[b]面对这些情况,我们都可以用Handler机制来异步处理

[/b]

1、网络访问

public class MainActivity  extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_activity);
}

private void TestMethod(){
//TODO 一般在这里开启一个进度条
new Thread() {
public void run() {
try {
//TODO 这里添加一个网络访问操作
Message msg = new Message();
msg.obj = result;
msg.what = 3;
handler.sendMessage(msg);
} catch (IOException e) {
//TODO 这里需要关闭一下进度条
e.printStackTrace();
}
};
}.start();
}

//new一个处理会掉信息的Handler
Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
//TODO Something
break;
}
}
};
}

2、Adapter,dialog,PopuWindow等回调数据

从主类中new一个Handler的回调处理,并传入Handler

Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0: // 返回编辑
//TODO 在这里执行返回后需要的操作
}
}
};

ReEditDialog dialog = new ReEditDialog(this,handler);//传入handler
dialog.show();


在Adapter,dialog,PopuWindow等中发送消息
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);

3、开启倒计时

Handler verifyTimeOutHandler = new Handler();
private int verifyMobileTimeOut=30;
private int  timeOutIndex=verifyMobileTimeOut;
private Runnable verifyTimeOutThread = new Runnable() {
public void run() {
if(timeOutIndex>0){
bt_get_verrifycode.setText(timeOutIndex+"秒后重试");
bt_get_verrifycode.setTextColor(Color.WHITE);
timeOutIndex--;
verifyTimeOutHandler.postDelayed(this,1000);//参数是Runnable和延迟时间
}else{
timeOutIndex=verifyMobileTimeOut;
verifyEnable();
}
}
};

//某个方法里面开启发送
verifyTimeOutHandler.post(verifyTimeOutThread);


总结:一般使用Handler主要就是注意两个地方:一是new一个handler处理接收的回调数据,二是用handler发送消息
//第一步:new一个handler处理接收的回调数据
Handler handler = new Handler() {
public void handleMessage(Message msg) {
<span style="white-space:pre"> </span>switch (msg.what) {
case 0: // 返回编辑
//TODO 在这里执行返回后需要的操作
}
}
};

//第二步:<span style="white-space:pre">用handler发送消息
Message msg = new Message(); msg.what = 0; handler.sendMessage(msg);


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: