Handler基本概念:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。
这种机制通常用来处理相对耗时比较长的操作。
使用一个例子简单的来介绍一下Handler。
示例1:一个应用程序中有2个按钮(start、end),当点击start按钮时,执行一个线程,这个线程在控制台输出一串字符串,并且每隔3秒再执行一次线程,直到点击end按钮为止,线程停止。
下图为这个应用程序的界面:
下图为执行程序时控制台的输出:
开发步骤:
1、 新建一个Android应用程序
2、 在布局文件中添加2个Button控件标签,并为其设置属性和值
3、 在Activity中,声明控件变量并根据id获得控件对象
4、 在Activity中,创建一个Handler对象
5、 在Activity中,创建一个Runnable对象
a) 以匿名内部类的方式
b) 将要执行的操作写在Runnable对象中的run()方法中
i. 打印出一句话
ii. 调用Runnable对象的postDelayed()方法
6、 在Activity中,编写start按钮需要的监听器,并绑定
a) 在这个监听器的Onclick()方法中,调用Handler的post()方法,将要执行的线程对象放到队列当中。
7、 在Activity中,编写end按钮需要的监听器,并帮定
a) 在这个监听器的Onclick()方法中,调用Handler的removeCallbacks ()方法,删除队列当中未执行的线程对象。
b)
下面是Activity的代码:
转载自:http://byandby.iteye.com/blog/832467
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。
这种机制通常用来处理相对耗时比较长的操作。
使用一个例子简单的来介绍一下Handler。
示例1:一个应用程序中有2个按钮(start、end),当点击start按钮时,执行一个线程,这个线程在控制台输出一串字符串,并且每隔3秒再执行一次线程,直到点击end按钮为止,线程停止。
下图为这个应用程序的界面:
![](http://dl.iteye.com/upload/attachment/359719/f08201ed-9624-3648-aa61-7f4417b2bccc.jpg)
下图为执行程序时控制台的输出:
![](http://dl.iteye.com/upload/attachment/359721/1090a482-7564-3710-b05b-90955bbe7b3f.jpg)
开发步骤:
1、 新建一个Android应用程序
2、 在布局文件中添加2个Button控件标签,并为其设置属性和值
3、 在Activity中,声明控件变量并根据id获得控件对象
4、 在Activity中,创建一个Handler对象
5、 在Activity中,创建一个Runnable对象
a) 以匿名内部类的方式
b) 将要执行的操作写在Runnable对象中的run()方法中
i. 打印出一句话
ii. 调用Runnable对象的postDelayed()方法
6、 在Activity中,编写start按钮需要的监听器,并绑定
a) 在这个监听器的Onclick()方法中,调用Handler的post()方法,将要执行的线程对象放到队列当中。
7、 在Activity中,编写end按钮需要的监听器,并帮定
a) 在这个监听器的Onclick()方法中,调用Handler的removeCallbacks ()方法,删除队列当中未执行的线程对象。
b)
下面是Activity的代码:
- package android.handler;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class HandlerTest extends Activity {
- /** Called when the activity is first created. */
- private Button startButton;
- private Button endButton;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //根据id获得控件对象
- startButton = (Button)findViewById(R.id.startButton);
- endButton = (Button)findViewById(R.id.endButton);
- //为控件设置监听器
- startButton.setOnClickListener(new StartButtonListener());
- endButton.setOnClickListener(new EndButtonListener());
- }
- class StartButtonListener implements OnClickListener{
- public void onClick(View v) {
- //调用Handler的post()方法,将要执行的线程对象放到队列当中
- handler.post(updateThread);
- }
- }
- class EndButtonListener implements OnClickListener{
- public void onClick(View v) {
- //调用Handler的removeCallbacks()方法,删除队列当中未执行的线程对象
- handler.removeCallbacks(updateThread);
- }
- }
- //创建Handler对象
- Handler handler = new Handler();
- //新建一个线程对象
- Runnable updateThread = new Runnable(){
- //将要执行的操作写在线程对象的run方法当中
- public void run(){
- System.out.println("updateThread");
- //调用Handler的postDelayed()方法
- //这个方法的作用是:将要执行的线程对象放入到队列当中,待时间结束后,运行制定的线程对象
- //第一个参数是Runnable类型:将要执行的线程对象
- //第二个参数是long类型:延迟的时间,以毫秒为单位
- handler.postDelayed(updateThread, 3000);
- }
- };
- }
转载自:http://byandby.iteye.com/blog/832467