Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。 Handler 常用方法:

post(Runnable)

postAtTime(Runnable,long)

postDelayed(Runnable long)

sendEmptyMessage(int)

sendMessage(Message)

sendMessageAtTime(Message,long)

sendMessageDelayed(Message,long)

以上post类方法允许你排列一个Runnable对象到主线程队列中, sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.

Android三种实现定时器的方法

方法一:Handler+Thread

  1. package com.xunfang.handerDemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.widget.TextView;
  7. /**
  8. * handler定时器
  9. *
  10. * @author Smalt
  11. *
  12. */
  13. public class HanderDemoActivity extends Activity {
  14. TextView tvShow;
  15. private int i = 0;
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. tvShow = (TextView) findViewById(R.id.tv_show);
  21. new Thread(new ThreadShow()).start();
  22. }
  23. // handler类接收数据
  24. Handler handler = new Handler() {
  25. public void handleMessage(Message msg) {
  26. if (msg.what == 1) {
  27. tvShow.setText(Integer.toString(i++));
  28. System.out.println("receive....");
  29. }
  30. };
  31. };
  32. // 线程类
  33. class ThreadShow implements Runnable {
  34. @Override
  35. public void run() {
  36. // TODO Auto-generated method stub
  37. while (true) {
  38. try {
  39. Thread.sleep(1000);
  40. Message msg = new Message();
  41. msg.what = 1;
  42. handler.sendMessage(msg);
  43. System.out.println("send...");
  44. } catch (Exception e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. System.out.println("thread error...");
  48. }
  49. }
  50. }
  51. }
  52. }
package com.xunfang.handerDemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView; /**
* handler定时器
*
* @author Smalt
*
*/
public class HanderDemoActivity extends Activity {
TextView tvShow;
private int i = 0; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvShow = (TextView) findViewById(R.id.tv_show);
new Thread(new ThreadShow()).start();
} // handler类接收数据
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
tvShow.setText(Integer.toString(i++));
System.out.println("receive....");
}
};
}; // 线程类
class ThreadShow implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(1000);
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
System.out.println("send...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("thread error...");
}
}
}
}
}

方法二:Handler类自带的postDelyed

  1. package com.xunfang.handerDemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.widget.TextView;
  6. /**
  7. * handler定时器使用postDelyed实现
  8. *
  9. * @author Smalt
  10. *
  11. */
  12. public class HanderDemoActivity extends Activity {
  13. TextView tvShow;
  14. private int i = 0;
  15. private int TIME = 1000;
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. tvShow = (TextView) findViewById(R.id.tv_show);
  21. handler.postDelayed(runnable, TIME); //每隔1s执行
  22. }
  23. Handler handler = new Handler();
  24. Runnable runnable = new Runnable() {
  25. @Override
  26. public void run() {
  27. // handler自带方法实现定时器
  28. try {
  29. handler.postDelayed(this, TIME);
  30. tvShow.setText(Integer.toString(i++));
  31. System.out.println("do...");
  32. } catch (Exception e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. System.out.println("exception...");
  36. }
  37. }
  38. };
  39. }
package com.xunfang.handerDemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView; /**
* handler定时器使用postDelyed实现
*
* @author Smalt
*
*/
public class HanderDemoActivity extends Activity {
TextView tvShow;
private int i = 0;
private int TIME = 1000; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvShow = (TextView) findViewById(R.id.tv_show);
handler.postDelayed(runnable, TIME); //每隔1s执行
} Handler handler = new Handler();
Runnable runnable = new Runnable() { @Override
public void run() {
// handler自带方法实现定时器
try {
handler.postDelayed(this, TIME);
tvShow.setText(Integer.toString(i++));
System.out.println("do...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("exception...");
}
}
}; }

方法三:

Handler+Timer+TimerTask

    1. package com.xunfang.handerDemo;
    2. import java.util.Timer;
    3. import java.util.TimerTask;
    4. import android.app.Activity;
    5. import android.os.Bundle;
    6. import android.os.Handler;
    7. import android.os.Message;
    8. import android.widget.TextView;
    9. /**
    10. * 定时器实现:Handler+Timer+TimerTask
    11. *
    12. * @author Smalt
    13. *
    14. */
    15. public class HanderDemoActivity extends Activity {
    16. TextView tvShow;
    17. private int i = 0;
    18. private int TIME = 1000;
    19. @Override
    20. public void onCreate(Bundle savedInstanceState) {
    21. super.onCreate(savedInstanceState);
    22. setContentView(R.layout.main);
    23. tvShow = (TextView) findViewById(R.id.tv_show);
    24. timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行
    25. }
    26. Handler handler = new Handler() {
    27. public void handleMessage(Message msg) {
    28. if (msg.what == 1) {
    29. tvShow.setText(Integer.toString(i++));
    30. }
    31. super.handleMessage(msg);
    32. };
    33. };
    34. Timer timer = new Timer();
    35. TimerTask task = new TimerTask() {
    36. @Override
    37. public void run() {
    38. // 需要做的事:发送消息
    39. Message message = new Message();
    40. message.what = 1;
    41. handler.sendMessage(message);
    42. }
    43. };
    44. }

Handler基本概念的更多相关文章

  1. AME_Oracle自带AME审批链详解AME Standard Handler(概念)

    2014-05-30 Created By BaoXinJian Oracle 自带了3大类,13个子类的审批链Action Type, 对应了13个标准的AME Standard Handler

  2. Android ------ handler 异步处理消息

    Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发 ...

  3. android handler 简介

    android的handler 是一个神奇东西,处理异步消息的时候,我们离不开他.那么他的具体的介绍是什么了? Handler基本概念:      Handler主要用于异步消息的处理:当发出一个消息 ...

  4. Handler 消息传递机制

    1,Handler 的概念Handler 是用来干什么的?1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一 ...

  5. handler looper 和 线程

     Handler的概念: 顾名思义,handler在英语中是“操作着,处理者的意思”,而官方的文档给出的概念是,handler允许你发送或者处理Message对象或者Runable对象,这两个对象都是 ...

  6. 第33讲 UI组件_进度条ProcessBar和消息队列处理器handler

    第33讲UI组件_进度条ProcessBar和消息队列处理器handler 1. 进度条ProcessBar 一个可视化的进度指示器,代表正在执行的耗时任务.可以为用户展示一个进度条,表示正在执行的任 ...

  7. Android中的Handler及它所引出的Looper、MessageQueue、Message

    0.引入 0.1.线程间通信的目的 首先,线程间通信要交流些什么呢? 解答这个问题要从为什么要有多线程开始,需要多线程的原因大概有这些 最早也最基本:有的任务需要大量的时间,但其实并不占用计算资源,比 ...

  8. android Handler的使用(一)

    Handler的使用(一) Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出 ...

  9. Netty入门学习

    一.他山之石 Netty实现原理浅析 http://www.importnew.com/15656.html netty线程模型 http://www.infoq.com/cn/articles/ne ...

随机推荐

  1. centos7.0 64位系统安装 nginx

    1 下载nginx 从nginx官网 http://nginx.org/ 下载新的稳定版本nginx 并上传到linux服务器 2 安装nginx 所需要的扩展 yum -y install pcre ...

  2. bzoj3730:震波

    题意:给一棵树,只有点权无边权, ,每次询问求以一个点为中心,半径为k的全职和. 考虑动态树分治.我们对于每个点(点分树)维护两个树状数组.两个树状数组都以距离为下标,权值为内容.第一个树状数组维护子 ...

  3. Solr整合中文分词组件IKAnalyzer

    我用的Solr是4.10版本, 在csdn下载这个版本的IKAnalyzer:IK Analyzer 2012FF_hf1.zip 解压后目录如下: (1)这里还用solr自带的example实验分词 ...

  4. Lantern卫星接收器:为你提供免费上网服务

    包括笔者在内,许多现代人的日常生活都无法离开网络,因为在网络上我们几乎可以找到任何我们需要的信息.但你是否有想过在户外无网络信号的情况下如何接收网络数据呢?一个名为Outernet Inc.的公司为我 ...

  5. GCC编译器编译链接

    在gcc编译器环境下,常见的文件扩展名的含义如下: .c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出. .h:头文件 .s:经过编译得到的汇编程序代码,它可以通过-S参数输出. ...

  6. Annotation注解(有源代码)

    注解(annotation)概述: ·从JDK5.0 开始,java增加了对元数据(MetaData)的支持,也就是Annotation(注解) ·Annotation其实就是代码里的特殊标记,这些标 ...

  7. 用VS2010+Qt4.6.4编译QtAV

    http://blog.csdn.net/trustguan/article/details/45623891 如果在链接的过程中,出现以上错误: 1>MSVCRTD.lib(MSVCR100D ...

  8. Ubuntu 14.04中Mysql中文乱码问题最小化解决

    [client]default-character-set=utf8 [mysqld]default-storage-engine=INNODBcharacter-set-server=utf8col ...

  9. MYSQL数据库操作语句

    1.创建数据库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specifica ...

  10. vim编辑下Python2.0自动补全

    Python自动补全有vim编辑下和python交互模式下,下面分别介绍如何在这2种情况下实现Tab键自动补全. 一.vim python自动补全插件:pydiction 可以实现下面python代码 ...