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、网络访问
2、Adapter,dialog,PopuWindow等回调数据
从主类中new一个Handler的回调处理,并传入Handler
在Adapter,dialog,PopuWindow等中发送消息
3、开启倒计时
总结:一般使用Handler主要就是注意两个地方:一是new一个handler处理接收的回调数据,二是用handler发送消息
在开发中,我们经常会碰到这类问题:
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);
相关文章推荐
- Android WebView Java和JS通信
- AIDL(AndroidInterfaceDefinitionLanguage:接口定义语言)
- android viewGroup事件分发一
- Android MVC模式
- 关于 Android 进程保活,你所需要知道的一切
- Android Inline hook跳转部分代码
- 音乐播放器源码
- Android 注解的简单使用之省去findViewById()
- 【转】android Looper 理解
- Android基本控件 - Button和ImageButton
- Android生成签名文件并用其对apk文件进行签名(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误完美解决)
- android多媒体框架之流媒体具体流程篇2----base on jellybean(十二)
- 浅谈如何避免Android内存溢出
- android 流量统计
- Android动画之RotateAnimation使用
- 手机连接不了android studio的原因
- android多媒体框架之流媒体具体流程篇1----base on jellybean(十一)
- 仿格瓦拉转场动画
- android AsyncTask介绍
- Android 枚举(Enum)类最佳实践