Android 再谈handler
今天在做http网络事件的响应网络接收处理一般不能放在主线程中使用,目前也只会使用AsyncTask进行处理!之前虽然写过handler处理的一些文章但是发现全不会了!无奈~
关于handler某位兄弟已经整理的很透彻了!现在引用下原话如下:
Handler监听者框架:子线程是事件源,主线程是监听者。
Handler作为子线程的监听器出现:主线程中生成Handler的子类,并重写handleMessage(Message msg) 方法,用来对子线程响应。子线程调用Hanlder的sendMessage(message)发送事件。
import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.util.Log; import android.widget.TextView;public class MainActivity extends Activity {private final static String TAG = "ThreadTest";TextView myTv = null;int i = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myTv = (TextView) this.findViewById(R.id.tv1);// 执行该线程new Thread(runnable).start();}/*** 主线程监听者*/Handler myHandler = new Handler() {public void handleMessage(android.os.Message msg) {Log.i(TAG, "begin--->handleMessage");if (msg.what == 0x000001) {myTv.setText(String.valueOf(i));}Log.i(TAG, "end--->handleMessage");super.handleMessage(msg);};};/*** 子线程事件源*/Runnable runnable = new Runnable() {@Overridepublic void run() {while (!Thread.currentThread().isInterrupted()) {i++;Message msg = new Message();msg.what = 0x000001;Log.i(TAG, "begin--->sendMessage");myHandler.sendMessage(msg);Log.i(TAG, "end--->sendMessage");Log.i(TAG, "begin--->dosomething");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}Log.i(TAG, "end--->dosomething");}}};}
打印下输出:发现它并不是等dosomething执行完毕之后再调用handlemessage事件,而是一旦调用sendmessage后就会执行handlemessage。
Handler钩子方式:在主线程中生成一个Hanlder,用Handler的Post(Runnable)方法可以将Runnable钩到主线程中运行。
import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.TextView;public class MainActivity extends Activity {private final static String TAG = "ThreadTest";TextView myTv = null;//handler在主线程中创建,调用post的时候钩子会把它钩回主线程Handler myHandler = new Handler();int i = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myTv = (TextView) this.findViewById(R.id.tv1);new Thread(runnable1).start();}/*** 子线程*/Runnable runnable1 = new Runnable() {@Overridepublic void run() {while (true) {i++;myHandler.post(runnable2);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};/*** 使用钩子将该子线程钩到主线程中*/Runnable runnable2 = new Runnable() {@Overridepublic void run() {myTv.setText(String.valueOf(i));}};}
对于我们有了这样子的一个handler,如果需要进行一个非常耗时的网络请求,也不必担心迟迟无法显示activity。因为下载的任务交给了我们的子线程。当完成任务的时候我们可以调用sendMessage方法,通知主线程更新UI。bingo!真是太棒了!
转载于:https://www.cnblogs.com/chenjianxiang/p/3913644.html
Android 再谈handler相关推荐
- android再谈屏幕适配之smallestwidth适配
1.概述 Android发展至今,功能越来越多,越来越强大,不过碎片化的问题也是众所周知的越来越严重,如果是做大众应用,我相信屏幕适配肯定是我们不可回避的一个问题,当然了,网上的适配方案有很多,比如: ...
- 马云再谈对钱没有兴趣;比尔·盖茨:微软原本可以击败 Android!TypeScript 3.7 发布 | 极客头条...
作者 | 唐小引 出品 | CSDN(ID:CSDNnews) 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客 ...
- 再谈select, iocp, epoll,kqueue及各种I/O复用机制 - Shallway - 博客频道 - CSDN.NET
再谈select, iocp, epoll,kqueue及各种I/O复用机制 - Shallway - 博客频道 - CSDN.NET 再谈select, iocp, epoll,kqueue及各种I ...
- android 再按一次退出程序
今天也是实在没有什么可以写的内容,不过还是想保持写博客的习惯,所以在网上查找了部分资料,决定写android 按两次back键退出app,这个功能很多app都有实现,而且很简单. 1.android中 ...
- Android 系统(59)---Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)
Android开发:Handler异步通信机制全面解析(包含Looper.Message Queue) 前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler ...
- Android全面解析Handler
前言: 由于Handler和Binder是Android开发的俩大利器之一,所以有必要来深入讲解一下Handler,关于Binder可以参考我上一篇博客<IPC机制 Binder>,废话不 ...
- Android消息机制(Handler机制) - 线程的等待和唤醒
我们都知道,Android的Handler机制,会在线程中开启消息循环,不断的从消息队列中取出消息,这个机制保证了主线程能够及时的接收和处理消息. 通常在消息队列中(MessageQueue)中没有消 ...
- 再探Handler(上)(Handler核心原理最全解析)
很久之前也写过Handler的相关文章,现在回过头去看,理解的还是较为浅薄.于是乎,决定再来深入研究一遍Handler. 首先抛出一个问题:子线程到主线程的通信方式有哪些?子线程到主线程通信的原理是什 ...
- 再谈 Go 语言在前端的应用前景
12 月 23 日,七牛云 CEO & ECUG 社区发起人许式伟先生在 ECUG Con 2018 现场为大家带来了主题为<再谈 Go 语言在前端的应用前景>的内容分享. 本文是 ...
最新文章
- 2017-10-6Linux基础知识(4)安装Linux及设置语言环境
- mysql 图形插件_对我来说数据库图形化管理工具用这个足够了
- IntelliJ IDEA 建空包合并问题。
- mysql signed 长度_浅谈mysql字段长度设置
- RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭
- MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例
- LinkedList类源码阅读
- url后面的参数是什么_揭秘亚马逊黑科技之超级URL原理
- 软件设计师考试考点分析总结
- max导unity注意及解决
- Python识别图片中的文字
- c语言pic延时1ms程序,几个延时子程序
- 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
- 在vs中怎样一次性的添加一个文件夹到解决方案里
- java关于Exception(异常)的详解
- Photoshop for Mac(图像处理软件)破解版安装
- 小巧精美原厂轴 Cherry发布全新MX Board 1.0
- 手把手教你下载在线地图?!再也不用下了
- 网页采集工具-免费网页采集工具大全
- 教育机构课程顾问常见黑话大全