Android Handler与Thread

来源:互联网 发布:淘宝怎么创建购物券 编辑:程序博客网 时间:2024/04/19 09:15

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
原创粉丝点击