Android_Handler实现异步回调加载数据

在学习怎么使用Handler机制来达到这些效果之前,最好还是对Handler机制、异步通信、同步通信有一个了解,前面发表过一篇博客是关于Handler机制讲解的:http://blog.csdn.net/u013035016/article/details/51181286

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

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

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

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

4、开启倒计时

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

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) {
      switch (msg.what) {
        case 0: // 返回编辑
            //TODO 在这里执行返回后需要的操作
        }
    }
};


//第二步:用handler发送消息
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);

 
  

你可能感兴趣的:(Android)