智能课程表Android版-日期和时间的动态显示(二)

    上一篇文章我们实现了时间的显示,但是是静态的,不能动态改变,那么怎么才能让静态的时间能以秒的方式来动态改变呢?

    由于在上一篇文章中我们获得时间的方法是Calendar()类获得当前时间的方法getTime(),它只是返回一个程序启动的那个时间点的时间,那么要想以秒动的方式动态显示时间,我们可以考虑使用多线程来每秒刷新一次主界面,这样就可以每秒获得一次当前时间点的时间以秒动的方式来显示时间了。

    在Android中我们可以使用Handler来实现多线程。

    HandlerAndroid里负责发送和处理消息。它的主要用途有:

(1).按计划发送消息或执行某个Runnable(使用post方法);

(2).从其他线程中发送来的消息放入消息队列中,避免线程冲突(常用于更新UI

我们主要使用Handler的两个方法:post(Runnable)postDelayed(Runnable,long)

代码如下:

package nyist.daylight;

import java.util.Calendar;
import java.text.SimpleDateFormat;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class DateAndTime extends Activity {
    /** Called when the activity is first created. */
	private String DEFAULT_TIME_FORMAT = "yyyy-MM-dd hh:mm:ss";
	private TextView textview01;
	private String time;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        handler.post(updateThread);
        //将将要执行的线程对象添加到线程队列当中,此时将会把该线程对象添加到handler对象的线程队列当中
        textview01=(TextView)findViewById(R.id.textview01);
    }
    //创建Handler对象   
    Handler handler = new Handler();  
    //新建一个线程对象
    Runnable updateThread = new Runnable(){   
        //将要执行的操作写在线程对象的run方法当中   
        public void run(){
        	handler.postDelayed(updateThread, 1000);
        	//调用Handler的postDelayed()方法   
            //这个方法的作用是:将要执行的线程对象放入到队列当中,待时间结束后,运行制定的线程对象   
            //第一个参数是Runnable类型:将要执行的线程对象   
            //第二个参数是long类型:延迟的时间,以毫秒为单位  
        	SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT);
    		time = dateFormatter.format(Calendar.getInstance().getTime());
    		textview01.setText(time);
        }   
    };
}

模拟器中运行既得:

你可能感兴趣的:(多线程,UI,android,String,calendar,Class)