Android Handler与Thread

0x0 前言

在上一篇文章中,Android 线程之Thread 中,我们发现单纯使用Thread类,更新UI时,都要创建新的Runable对象,对于资源是一种浪费。在本篇中,我们将Thread与Handler联合起来使用,避免资源浪费。

0x1 概述

A Handler allows you to send and process Message and Runnable objects
associated with a thread’s MessageQueue.

0x3 演示

怎么使用Handler呢,以一个账户登录demo为例子,截取部分代码:
在我们的activity中,Handler类推荐用法

private static class IHandler
            extends Handler {
        private final WeakReference<Activity> mActivity;

        public IHandler(MainActivity activity) {
            mActivity = new WeakReference<Activity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
//            super.handleMessage(msg);
            if (dialog != null) {
                dialog.dismiss();
            }
            int flag = msg.what;
            switch (flag) {
                case 0:
                    String errorMsg = msg.getData().getSerializable("ErrorMsg").toString();
                    ((MainActivity) mActivity.get()).showTips(errorMsg);
                    break;
                case FLAG_LOGIN_SUCCESS:
                    ((MainActivity) mActivity.get()).showTips(MSG_LOGIN_SUCCESS);
                    break;
                default:
                    break;

            }

        }
    }

    private IHandler handler = new IHandler(this);

登录线程

 //登陆线程
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            user.userLogin(MainActivity.this, userName, password);
                            handler.sendEmptyMessage(FLAG_LOGIN_SUCCESS);
                        } catch (ConnectException e) {
                            Message message = new Message();
                            Bundle data = new Bundle();
                            data.putSerializable("ErrorMsg", "无法确立连接");
                            message.setData(data);
                            handler.sendMessage(message);
                        } catch (ConnectTimeoutException e) {
                            Message message = new Message();
                            Bundle data = new Bundle();
                            data.putSerializable("ErrorMsg", "连接超时");
                            message.setData(data);
                            handler.sendMessage(message);
                        } catch (SocketTimeoutException e) {
                            Message message = new Message();
                            Bundle data = new Bundle();
                            data.putSerializable("ErrorMsg", "SocketTimeoutException连接超时");
                            message.setData(data);
                            handler.sendMessage(message);
                        } catch (ServiceRulesException e) {
                            Message message = new Message();
                            Bundle data = new Bundle();
                            data.putSerializable("ErrorMsg", e.getMessage());
                            message.setData(data);
                            handler.sendMessage(message);
                        } catch (Exception e) {
                            e.printStackTrace();

                            Message message = new Message();
                            Bundle data = new Bundle();
                            data.putSerializable("ErrorMsg", MSG_LOGIN_ERROR);
                            message.setData(data);
                            handler.sendMessage(message);
                        }

                    }
                });
                thread.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值