實驗五 使用執行緒設計秒錶(時間不精確)
阿新 • • 發佈:2019-01-07
實驗五 使用執行緒
實驗目的
熟悉和掌握Android執行緒的使用
實驗要求
- 完成一個秒錶,具備啟停功能,正確使用工作執行緒完成介面重新整理
- 分析秒錶的計時是否準確,原因是什麼,如何保證秒錶計時準確
工程程式碼
專案工程結構圖
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>
實現效果