3种时间服务

(1)计时器chronometer
chronometer是TextView的子类,这个组件可以用1秒的时间间隔进行计时,并显示出计时结果、
chronometer类有3个重要的方法,start , stop和setBase,start和stop没有任何参数,setBase方法有一个参数,表示开始计时的基准时间,如果要从当前时刻重新计时,可以将该值设定为SystemClock.elapsedRealtime();

还可以对Chronometer组件做进一步设置。
使用Chronometer的setFormat方法,定制输出的时间。
setFormat(“计时信息:%s”);
则Chronometer组件显示的计时信息如下:
计时信息: 01:20;

Chronometer组件还可以用onChronometerTick事件方法来捕捉计时动作,该方法1秒调用一次,要想使用该事件方法,则必须实现下面的接口: onChronometerTick事件方法。
例子如下:

package net.blogjava.mobile;

import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
import android.widget.Chronometer.OnChronometerTickListener;

public class Main extends Activity implements OnClickListener,
        OnChronometerTickListener
{
    private Chronometer chronometer;
    private TextView tvTime;


    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub


        super.onRestoreInstanceState(savedInstanceState);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState)
    {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
    }

    @Override
    public Object onRetainNonConfigurationInstance()
    {
        // TODO Auto-generated method stub
        return super.onRetainNonConfigurationInstance();
    }

    @Override
    public void onClick(View view)
    {
        switch (view.getId())
        {
            case R.id.btnStart: 
                chronometer.start();
                break;
            case R.id.btnStop:
                chronometer.stop();
                break;
            case R.id.btnReset:
                chronometer.setBase(SystemClock.elapsedRealtime());

                break;
        }
    }

    @Override
    public void onChronometerTick(Chronometer chronometer)
    {

        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

        tvTime.setText("当前时间:" + sdf.format(new Date()));

    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tvTime = (TextView)findViewById(R.id.tvTime);
        Button btnStart = (Button) findViewById(R.id.btnStart);
        Button btnStop = (Button) findViewById(R.id.btnStop);
        Button btnReset = (Button) findViewById(R.id.btnReset);
        chronometer = (Chronometer) findViewById(R.id.chronometer);
        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
        btnReset.setOnClickListener(this);
        chronometer.setOnChronometerTickListener(this);
        chronometer.setFormat("计时器:%s");

    }
}

(2)预约时间Handler
Handler是处理定时操作的核心类,通过Handler类,可以提交和处理一个Runnable对象,这个对象的run方法可以立刻执行,也可以在指定的时间后执行。
Handler类主要可以使用3个方法来设置执行Runnable对象的时间。

public final boolean post(Runnable r)
public final boolean postAtTime(Runnable r, long uptimeMillis);
public final boolean postDelayed(Runnable r, long delayMillis);//在指定的时间间隔内执行

必须要实现一个Runnable接口的类。

(3)定时器Timer
在功能上和chronometer 类似,但Timer比chronometer 更强大,可以设置重复执行和不重复执行。

Timer timer = new Timer();
timer.schedule(new TimerTask()
{
    @Override
    public void run()
    {
    }
},5000
);//5秒后执行

实际上,TimerTask类实现了runnable接口,因此Timer实际上是在线程上执行run方法。

(*)全局定时器:AlarmManager

上面说的时间服务都是随着应用程序关闭,就没了的,闹钟!

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

本文所说案例,代码如下所示:
http://download.csdn.net/detail/chengyangyy/8866813

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值