灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2826回复:0

Android中Timer计时器详解

楼主#
更多 发布于:2012-09-06 13:59


直接上代码,解释看注释,一个火箭发射倒计时的例子
main.xml

[html] <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <Button
        Android:id="@+id/button"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="开始倒计时" />

    <TextView
        Android:id="@+id/textView"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >
    <Button
        Android:id="@+id/button"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="开始倒计时" />
    <TextView
        Android:id="@+id/textView"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" />
</LinearLayout>
TimerDemoActivity.java

[java] package com.tianjf;

import java.util.Timer;
import java.util.TimerTask;

import Android.app.Activity;
import Android.os.Bundle;
import Android.os.Handler;
import Android.os.Message;
import Android.util.Log;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.TextView;

public class TimerDemoActivity extends Activity implements OnClickListener {

    private Button button;
    private TextView textView;
    private Timer timer;

    // 定义Handler  
    Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            Log.d("debug", "handleMessage方法所在的线程:"
                    + Thread.currentThread().getName());

            // Handler处理消息  
            if (msg.what > 0) {
                textView.setText(msg.what + "");
            } else {
                textView.setText("点火!");
                // 结束Timer计时器  
                timer.cancel();
            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.textView);

        Log.d("debug", "onCreate方法所在的线程:"
                + Thread.currentThread().getName());
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button:
            // 按钮按下时创建一个Timer定时器  
            timer = new Timer();
            // 创建一个TimerTask  
            // TimerTask是个抽象类,实现了Runnable接口,所以TimerTask就是一个子线程  
            TimerTask timerTask = new TimerTask() {
                // 倒数10秒  
                int i = 10;

                @Override
                public void run() {
                    Log.d("debug", "run方法所在的线程:"
                            + Thread.currentThread().getName());
                    // 定义一个消息传过去  
                    Message msg = new Message();
                    msg.what = i--;
                    handler.sendMessage(msg);
                }
            };
            // 定义计划任务,根据参数的不同可以完成以下种类的工作:  
            // 1.schedule(TimerTask task, Date when) ー> 在固定时间执行某任务  
            // 2.schedule(TimerTask task, Date when, long period) ー> 在固定时间开始重复执行某任务,重复时间间隔可控  
            // 3.schedule(TimerTask task, long delay) ー> 在延迟多久后执行某任务  
            // 4.schedule(TimerTask task, long delay, long period) ー> 在延迟多久后重复执行某任务,重复时间间隔可控  
            timer.schedule(timerTask, 3000, 1000);// 3秒后开始倒计时,倒计时间隔为1秒  
            break;

        default:
            break;
        }
    }
}


喜欢0 评分0
游客

返回顶部