(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