现在的位置: 首页 > 综合 > 正文

android Handle机制(一)

2014年03月21日 ⁄ 综合 ⁄ 共 2180字 ⁄ 字号 评论关闭

今天介绍一下 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,完毕!


抱歉!评论已关闭.