今天介绍一下 android Handle机制,这在开发是必然会用到的,很重要!
Handler基本概念:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。使用一个例子简单的来介绍一下Handler。
示例1:一个应用程序中有2个按钮(start、end),当点击start按钮时,执行一个线程,这个线程在控制台输出一串字符串,并且每隔3秒再执行一次线程,直到点击end按钮为止,线程停止。
1.建立一个工程文件,名为HandleDemo
2.建立布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/btn_start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="开始"
/>
<Button
android:id="@+id/btn_end"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="结束"
/>
</LinearLayout>
3.java代码
package com.handle.cn;
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 HandleDemoActivity extends Activity {
private Button btn_start, btn_end;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 初始化
init();
}
public void init() {
// 根据id获得控件对象
btn_start = (Button) this.findViewById(R.id.btn_start);
btn_end = (Button) this.findViewById(R.id.btn_end);
// 为控件设置监听器
btn_start.setOnClickListener(new startButtonListion());
btn_end.setOnClickListener(new endButtonListion());
}
class startButtonListion implements OnClickListener {
@Override
public void onClick(View v) {
// 调用Handler的post()方法,将要执行的线程对象放到队列当中
handler.post(UpdateThead);
}
}
class endButtonListion implements OnClickListener {
@Override
public void onClick(View v) {
// 调用Handler的removeCallbacks()方法,删除队列当中未执行的线程对象
handler.removeCallbacks(UpdateThead);
}
}
// 创建Handler对象
Handler handler = new Handler();
// 新建一个线程对象
Runnable UpdateThead = new Runnable() {
// 将要执行的操作写在线程对象的run方法当中
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("updateThread");
// 调用Handler的postDelayed()方法
// 这个方法的作用是:将要执行的线程对象放入到队列当中,待时间结束后,运行制定的线程对象
// 第一个参数是Runnable类型:将要执行的线程对象
// 第二个参数是long类型:延迟的时间,以毫秒为单位
handler.postDelayed(UpdateThead, 3000);
}
};
}
4.运行程序:
Ok,完毕!