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
- Android Thread 与 Handler
- Android Handler与Thread
- Android Thread 与 Handler 的关系
- android中handlerthread与handler + thread区别
- Android中Handler与Thread的区别
- Thread与Handler总结
- Thread、Handler与HandlerThread
- AsyncTask与Thread+Handler
- AsyncTask 与Handler+Thread
- Android: thread & handler
- android Thread/Handler 实现
- android thread handler timertask
- android thread handler
- android thread handler
- Android Thread and Handler
- Android Handler Thread
- Android,UI主线程与子线程 handler,thread使用
- Android游戏开发之Thread与Handler执行多线程
- poj3734
- NSNumber,NSDate,NSValue
- 编程之美 资格赛B 字符串回文子序列
- 计算天数 - javascript
- 随便写写
- Android Handler与Thread
- 初识Lua——OpenWrt路由界面配置
- 如何保存网页背景图片
- 小菜学Chromium之OpenGL学习之二
- 设计模式之:观察者模式
- ajax请求跨域问题
- OpenWrt Web界面修改及功能实现实例说明
- 浅拷贝与深拷贝
- 39个让你受益的HTML5教程