在Android SDK中提供了多種時間服務。這些時間服務主要處理在一定時間間隔或未來某一時間發生的任務。Android系統中的時間服務的範圍既可以是應用程式本身,也可以是整個Android系統。本節將詳細介紹這些時間服務的使用方法,並給出大量的執行個體供讀者學習。
計時器:Chronometer
本節的例子代碼所在的工程目錄是src/ch08/ch08_chronometer
Chronometer是TextView的子類,也是一個Android組件。這個組件可以用1秒的時間間隔進行計時,並顯示出計時結果。
Chronometer類有3個重要的方法:start、stop和setBase,其中start方法表示開始計時;stop方法表示停止計時;setBase方法表示重新計時。start和stop方法沒有任何參數,setBase方法有一個參數,表示開始計時的基準時間。如果要從當前時刻重新計時,可以將該參數值設為SystemClock.elapsedRealtime()。
還可以對Chronometer組件做進一步設定。在預設情況下,Chronometer組件只輸出MM:SS或H:MM:SS的時間格式。例如,當計時到1分20秒時,Chronometer組件會顯示01:20。如果想改變顯示的資訊內容,可以使用Chronometer類的setFormat方法。該方法需要一個String變數,並使用"%s"表示計時資訊。例如,使用setFormat("計時資訊:%s")設定顯示資訊,Chronometer組件會顯示如下計時資訊:
計時資訊:10:20
Chronometer組件還可以通過onChronometerTick事件方法來捕捉計時動作。該方法1秒調用一次。要想使用onChronometerTick事件方法,必須實現如下介面:
- android.widget.Chronometer.OnChronometerTickListener
在本例中有3個按鈕,分別用來開始、停止和重設計時器,並通過onChronometerTick事件方法顯示目前時間,代碼如下:
- package net.blogjava.mobile;
-
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import android.app.Activity;
- 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
- 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");
- // 將目前時間顯示在TextView組件中
- 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");
- }
- }
運行本節的例子,並單擊【開始】按鈕,在按鈕下方會顯示計時資訊,在按鈕的上方會顯示目前時間,8.16所示。單擊【重設】按鈕後,按鈕下方的計時資訊會從"計時器:00:00"開始顯示。