最近做一個項目用到Handler 和Message ,開始時不是很明白,不了解其中的內部機制,所以開發起來有點難度,之后自己找了Android 時間服務 這一節的內容,總結了一點關于時間的知識,在這里大概寫一下,也給更多有需要的童鞋參考參考:
1. 這里首先來的是定時器Chronometer ,這是一個組件,在可視化視圖中可以直接拖拽過去,然后自己設置相關的屬性,我平時直接邊界XML布局文件實現,個人感覺這樣思路不會混亂。定時器比較簡單,沒有很多復雜的方法,大家只要記住重要的3個方法:start(); stop(); setBase(); 前兩個方法沒有參數,是啟動和停止計時器的方法,后面的是重置計時器的,可以有參數,參數是從那個時間開始計時。先來看看效果圖:
?
步驟:
?1】 布局采用線性布局,自己砌上去就行了。不多說
?2】onChronometerTick事件方法是計時器每秒回調的方法,我們可以用它來更新UI,看下面的代碼:
package com.android.android_chronometer;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener,
?? ??? ?OnChronometerTickListener {
?? ?private Button btnStart, btnStop, btnReset;
?? ?private TextView textViewCurrentTime;
?? ?// 定時器,一個可以自己設定開始時間的定時器
?? ?private Chronometer chronometer;
?? ?private SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");;
?? ?@Override
?? ?protected void onCreate(Bundle savedInstanceState) {
?? ??? ?super.onCreate(savedInstanceState);
?? ??? ?setContentView(R.layout.activity_main);
?? ??? ?btnStart = (Button) this.findViewById(R.id.buttonBegin);
?? ??? ?btnStop = (Button) this.findViewById(R.id.buttonStop);
?? ??? ?btnReset = (Button) this.findViewById(R.id.buttonReset);
?? ??? ?textViewCurrentTime = (TextView) this
?? ??? ??? ??? ?.findViewById(R.id.textViewCurrentTime);
?? ??? ?chronometer = (Chronometer) this.findViewById(R.id.chronometer1);
?? ??? ?btnStart.setOnClickListener(this);
?? ??? ?btnStop.setOnClickListener(this);
?? ??? ?btnReset.setOnClickListener(this);
?? ??? ?chronometer.setOnChronometerTickListener(this);
?? ??? ?// 設定顯示的計時格式
?? ??? ?chronometer.setFormat("計時器:%s");
?? ?}
?? ?@Override
?? ?public boolean onCreateOptionsMenu(Menu menu) {
?? ??? ?// Inflate the menu; this adds items to the action bar if it is present.
?? ??? ?getMenuInflater().inflate(R.menu.main, menu);
?? ??? ?return true;
?? ?}
?? ?@Override
?? ?public void onClick(View v) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?switch (v.getId()) {
?? ??? ?case R.id.buttonBegin:
?? ??? ??? ?// 計時器啟動
?? ??? ??? ?chronometer.start();
?? ??? ??? ?break;
?? ??? ?case R.id.buttonStop:
?? ??? ??? ?// 計時器停止
?? ??? ??? ?chronometer.stop();
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?// 以當前時刻重新計時
?? ??? ??? ?chronometer.setBase(SystemClock.elapsedRealtime());
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?/** 定時器沒秒回調的方法,這樣可以在UI界面上更新數據 */
?? ?@Override
?? ?public void onChronometerTick(Chronometer chronometer) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?textViewCurrentTime.setText("當前時間:" + formatter.format(new Date()));
?? ?}
}
3】Handler 和Message 在后面的筆記中記錄。