1. 程式人生 > >實驗五 使用執行緒設計秒錶(時間不精確)

實驗五 使用執行緒設計秒錶(時間不精確)

實驗五 使用執行緒

實驗目的

熟悉和掌握Android執行緒的使用

實驗要求

  1. 完成一個秒錶,具備啟停功能,正確使用工作執行緒完成介面重新整理
  2. 分析秒錶的計時是否準確,原因是什麼,如何保證秒錶計時準確

在這裡插入圖片描述

工程程式碼

專案工程結構圖
在這裡插入圖片描述

MainActivity:

package com.example.wyx.exp_5;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private boolean isstop = true; private boolean isstart = false; private
int second=0; TextView hour; TextView minute; TextView miao; Button start; Button stop; Button qingling; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init
(); } public Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch(msg.arg1) { case 1: { second++;//秒數增加 if(second<6000) { if(second<100) miao.setText(Integer.toString(second)); else{ miao.setText(Integer.toString(second%100)); minute.setText(Integer.toString(second/100)); } //數字轉換字串 } else { hour.setText(Integer.toString(second/6000)); minute.setText(Integer.toString((second%6000)/100)); miao.setText(Integer.toString((second%6000)%100)); } } break; case 0:break; case 2:hour.setText("00"); minute.setText("00"); miao.setText("00"); break; } }}; private class mThread extends Thread { @Override //執行緒啟動時執行這個函式 public void run() { //一直迴圈,直到標誌位為“真” while (!isstop) { { try { //延時1ms Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message msg = new Message(); //訊息標誌 msg.arg1 = 1; //傳送這個訊息 mHandler.sendMessage(msg); } } } } public void init(){ hour=(TextView)findViewById(R.id.textView2); minute=(TextView)findViewById(R.id.textView4); miao=(TextView)findViewById(R.id.textView6); qingling=(Button)findViewById(R.id.button4); start=(Button)findViewById(R.id.button5); stop=(Button)findViewById(R.id.button6); final mThread thread=new mThread(); qingling.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isstop=true; second=0; Message msg2 = new Message(); //訊息標誌 msg2.arg1 = 2; mHandler.sendMessage(msg2); /* hour.setText("00"); minute.setText("00"); miao.setText("00");*/ } }); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isstop = false; if(!isstart) { thread.start(); isstart=true; } else{ mThread thread2=new mThread(); thread2.start(); } /*isstop = false; thread.start();*/ } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isstop = true; } }); } }

activity_main.xml:

<?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">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="25dp"
            android:text="秒錶"
            android:textColor="#000000"
            android:textSize="30dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView3"
            android:layout_alignBottom="@+id/textView3"
            android:layout_toStartOf="@+id/textView3"
            android:text="00"
            android:textColor="#000000"
            android:textSize="30dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="14dp"
            android:text="00"
            android:textColor="#000000"
            android:textSize="30dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView5"
            android:layout_alignBottom="@+id/textView5"
            android:layout_toEndOf="@+id/textView5"
            android:text="00"
            android:textColor="#000000"
            android:textSize="30dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView4"
            android:layout_alignBottom="@+id/textView4"
            android:layout_toStartOf="@+id/textView4"
            android:text=":"
            android:textColor="#000000"
            android:textSize="30dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView4"
            android:layout_alignBottom="@+id/textView4"
            android:layout_toEndOf="@+id/textView4"
            android:text=":"
            android:textColor="#000000"
            android:textSize="30dp"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="230dp"
            android:layout_height="60dp"
            android:layout_below="@+id/textView2"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="17dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button4"
                android:layout_width="70dp"
                android:layout_height="wrap_content"
                android:text="清零"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/button5"
                android:layout_width="70dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="計時"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/button6"
                android:layout_width="70dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="停止"
                android:textSize="20dp"/>

        </LinearLayout>


    </RelativeLayout>
</LinearLayout>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.wyx.exp_5">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

實現效果

在這裡插入圖片描述