在安卓开发中会遇到需要等待用户输入某些东西或者是等待某个事件发生的时候就需要
用到handle了。
举个栗子:
程序和安卓的串口进行通信,某个按钮按下后就开始不断的读取串口的数据并分析其中某个变量如 sum
若sum一直为0 那就在Textview上显示0 若不为0那么就在textview上显示这个数并同时对串口进行数据回复。
显然在这种情况下我们需要监听一个按钮,当这个按钮按下时就开始不断的查询串口中的数据,但是在UI交互层安卓是
不允许我们这样做的,如果这个查询时间超过5s就会被软件提示 “当前软件无反应是否等待?”很显然这个做法会被安卓干掉,
所有handle就出现了。
我们把循环的查询串口的工作放到handle里面去,也就是创建了一个新的线程然后让操作系统去执行它也就相当于无限循环了。
下面介绍一下用法。
-
package com.nguhyw.handledemo;
-
-
import android.os.Bundle;
-
import android.os.Handler;
-
import android.view.View;
-
import android.widget.Button;
-
import android.app.Activity;
-
-
public class MainActivity extends Activity {
-
-
private Button btnStart;
-
private Button btnStop;
-
// 创建Handler对象
-
Handler myhandle = new Handler();
-
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
-
btnStart = (Button) findViewById(R.id.btnStart);
-
btnStop = (Button) findViewById(R.id.btnStop);
-
-
btnStart.setOnClickListener(new View.OnClickListener() {
-
public void onClick(View arg0) {
-
// 调用Handler的post()方法,将要执行的线程对象放到队列当中
-
myhandle.post(UpdateThead);
-
}
-
});
-
-
btnStop.setOnClickListener(new View.OnClickListener() {
-
public void onClick(View arg0) {
-
// 调用Handler的removeCallbacks()方法,删除队列当中未执行的线程对象
-
myhandle.removeCallbacks(UpdateThead);
-
-
}
-
});
-
-
}
-
-
// 新建一个线程对象
-
Runnable UpdateThead = new Runnable() {
-
// 将要执行的操作写在线程对象的run方法当中
-
public void run() {
-
System.out.println("updateThread");
-
// 调用Handler的postDelayed()方法
-
// 这个方法的作用是:将要执行的线程对象放入到队列当中,待时间结束后,运行制定的线程对象
-
// 第一个参数是Runnable类型:将要执行的线程对象
-
// 第二个参数是long类型:延迟的时间,以毫秒为单位
-
myhandle.postDelayed(UpdateThead, 3000);
-
}
-
};
-
-
}
这个例子点击start之后就每隔三秒钟就打印一条信息。
点击stop之后就会停止打印。
就是那么简单。
阅读(2389) | 评论(0) | 转发(0) |