今天在做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相关推荐

  1. android再谈屏幕适配之smallestwidth适配

    1.概述 Android发展至今,功能越来越多,越来越强大,不过碎片化的问题也是众所周知的越来越严重,如果是做大众应用,我相信屏幕适配肯定是我们不可回避的一个问题,当然了,网上的适配方案有很多,比如: ...

  2. 马云再谈对钱没有兴趣;比尔·盖茨:微软原本可以击败 Android!TypeScript 3.7 发布 | 极客头条...

    作者 | 唐小引 出品 | CSDN(ID:CSDNnews) 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客 ...

  3. 再谈select, iocp, epoll,kqueue及各种I/O复用机制 - Shallway - 博客频道 - CSDN.NET

    再谈select, iocp, epoll,kqueue及各种I/O复用机制 - Shallway - 博客频道 - CSDN.NET 再谈select, iocp, epoll,kqueue及各种I ...

  4. android 再按一次退出程序

    今天也是实在没有什么可以写的内容,不过还是想保持写博客的习惯,所以在网上查找了部分资料,决定写android 按两次back键退出app,这个功能很多app都有实现,而且很简单. 1.android中 ...

  5. Android 系统(59)---Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)

    Android开发:Handler异步通信机制全面解析(包含Looper.Message Queue) 前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler ...

  6. Android全面解析Handler

    前言: 由于Handler和Binder是Android开发的俩大利器之一,所以有必要来深入讲解一下Handler,关于Binder可以参考我上一篇博客<IPC机制 Binder>,废话不 ...

  7. Android消息机制(Handler机制) - 线程的等待和唤醒

    我们都知道,Android的Handler机制,会在线程中开启消息循环,不断的从消息队列中取出消息,这个机制保证了主线程能够及时的接收和处理消息. 通常在消息队列中(MessageQueue)中没有消 ...

  8. 再探Handler(上)(Handler核心原理最全解析)

    很久之前也写过Handler的相关文章,现在回过头去看,理解的还是较为浅薄.于是乎,决定再来深入研究一遍Handler. 首先抛出一个问题:子线程到主线程的通信方式有哪些?子线程到主线程通信的原理是什 ...

  9. 再谈 Go 语言在前端的应用前景

    12 月 23 日,七牛云 CEO & ECUG 社区发起人许式伟先生在 ECUG Con 2018 现场为大家带来了主题为<再谈 Go 语言在前端的应用前景>的内容分享. 本文是 ...

最新文章

  1. 2017-10-6Linux基础知识(4)安装Linux及设置语言环境
  2. mysql 图形插件_对我来说数据库图形化管理工具用这个足够了
  3. IntelliJ IDEA 建空包合并问题。
  4. mysql signed 长度_浅谈mysql字段长度设置
  5. RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭
  6. MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例
  7. LinkedList类源码阅读
  8. url后面的参数是什么_揭秘亚马逊黑科技之超级URL原理
  9. 软件设计师考试考点分析总结
  10. max导unity注意及解决
  11. Python识别图片中的文字
  12. c语言pic延时1ms程序,几个延时子程序
  13. 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
  14. 在vs中怎样一次性的添加一个文件夹到解决方案里
  15. java关于Exception(异常)的详解
  16. Photoshop for Mac(图像处理软件)破解版安装
  17. 小巧精美原厂轴 Cherry发布全新MX Board 1.0
  18. 手把手教你下载在线地图?!再也不用下了
  19. 网页采集工具-免费网页采集工具大全
  20. 教育机构课程顾问常见黑话大全

热门文章

  1. DSDT亮度修复失败
  2. Pyomo+GLPK使用
  3. Matlab周期图法使用FFT实现
  4. POJ 3237.Tree -树链剖分(边权)(边值更新、路径边权最值、区间标记)贴个板子备忘...
  5. 使用TortoiseGit处理代码冲突
  6. 在VisualState状态里更改Grid的列宽之类的
  7. B - Collisions
  8. 分享一些国外推广的站点
  9. hdu3182 状态压缩dp
  10. hdu4882 水贪心