1. 程式人生 > >安卓案例:動態時間與開關

安卓案例:動態時間與開關

1. 執行效果
2. 設計知識
(1)執行緒(Thread)
(2)非同步處理器(Handler)
3. 實現步驟
1、建立安卓應用Time
2、建立佈局檔案activity_time
在這裡插入圖片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="時間"
        android:textSize="80dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="開始"
            android:onClick="doStart"/>
        <Button
            android:id="@+id/two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止"
            android:onClick="doStop"/>

    </LinearLayout>

3、主介面TimeActivity

(1)程式碼

import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;

public class TimeActitity extends Activity {
    private Thread thread;
    private Handler handler;
    private TextView textView;
    private SimpleDateFormat sdf;
    private Button button1;
    private Button button2;
    private boolean A;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_time);
        
        textView = findViewById(R.id.tv_time);
        sdf=new SimpleDateFormat("hh:mm:ss");//定義時間格式
		
// 建立訊息處理器,接收子執行緒傳送的訊息進行處理,更新主介面標籤的內容 
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what==0x0001){
                    textView.setText(sdf.format(new Date()));
                }
            }
        };
    }

//停止按鈕
    public void doStop(View v){
        A=false;//將布林值設為false執行緒迴圈終止
        thread=null;//停止執行緒
    }
//開始按鈕
    public void doStart(View v){
        A=true;//開啟迴圈
        // 建立執行緒,定時傳送訊息
        thread =new Thread(new Runnable() {
            @Override
            public void run() {
                while (A){
                    handler.sendEmptyMessage(0x0001);//向主執行緒傳送訊息
                    try {
                        Thread.sleep(500);//執行緒睡眠0.5秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        thread.start();//開始執行緒
    }
//當程式銷燬是停止執行緒
    protected void onDestroy() {
        super.onDestroy();
        thread=null;
    }
}

(2)內容講解
開始執行緒與停止執行緒部分,用最簡單的布林值來開關迴圈,實現時間的停止與開始。當啟動開始按鈕時執行緒開始不斷迴圈向主執行緒傳送“0x0001”,當主執行緒收到對於訊息時將我們獲取的系統時間返回到文字框,迴圈傳送達到