Android使用线程实现简易秒表
AndroidManiFest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.timer">
<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>
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
</application>
</manifest>
主界面
MainActivity.java
package com.example.administrator.timer;
import android.content.Intent;
import android.os.Handler;
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 static Handler handler = new Handler();
private static TextView t1,labelView,t2,t3 = null;
static int timeusedinsec;
public static void UpdateGUI(double refreshDouble){
handler.post(RefreshLable);
}
private static Runnable RefreshLable = new Runnable(){
@Override
public void run() {
timeusedinsec += 1;
int hour=(int) (timeusedinsec / 3600)%60;
int minute = (int) (timeusedinsec / 60)%60;
int second = (int) (timeusedinsec% 60);
if (hour < 10)
t2.setText("0" + hour+":");
else
t2.setText("" + hour+":");
if (minute < 10)
t2.setText("0" + minute+":");
else
t2.setText("" + minute+":");
if (second < 10)
t3.setText("0" + second);
else
t3.setText("" + second);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
labelView = (TextView)findViewById(R.id.label);
Button startButton = (Button)findViewById(R.id.start);
Button stopButton = (Button)findViewById(R.id.stop);
t1=(TextView)findViewById(R.id.textView1);
t2=(TextView)findViewById(R.id.textView2);
t3=(TextView)findViewById(R.id.textView3);
Button clear=(Button)findViewById(R.id.button);
final Intent serviceIntent = new Intent(this,MyService.class);
clear.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
timeusedinsec=0;
t1.setText("00:");
t2.setText("00:");
t3.setText("00");
}
});
startButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
startService(serviceIntent);
}
});
stopButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
stopService(serviceIntent);
}
});
}
}
MyService.java
package com.example.administrator.timer;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class MyService extends Service {
private Thread workThread;
private int t;
@Override
public void onCreate() {
super.onCreate();
// Toast.makeText(this, "(1) 调用onCreate()",
// Toast.LENGTH_LONG).show();
workThread = new Thread(null,backgroudWork,"WorkThread");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//Toast.makeText(this, "(2) 调用onStart()",
// Toast.LENGTH_SHORT).show();
if (!workThread.isAlive()){
workThread.start();
}
}
@Override
public void onDestroy() {
super.onDestroy();
// Toast.makeText(this, "(3) 调用onDestroy()",
// Toast.LENGTH_SHORT).show();
workThread.interrupt();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private Runnable backgroudWork = new Runnable(){
@Override
public void run() {
try {
while(!Thread.interrupted()){
t=0;
MainActivity.UpdateGUI(t);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
页面布局
<?xml version="1.0" encoding="utf-8" ?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:useDefaultMargins="true"
android:columnCount="3" >
<TextView
android:id="@+id/label"
android:layout_width="110dp"
android:layout_height="50dp"
android:layout_column="1"
android:layout_gravity="center_horizontal"
android:text=" 秒 表"
android:textSize="20dp" />
<LinearLayout>
<TextView
android:id="@+id/textView1"
android:layout_width="35dp"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_gravity="center_horizontal"
android:layout_row="1"
android:text="00:"
android:textSize="20dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="35dp"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_gravity="center_horizontal"
android:layout_row="1"
android:text="00:"
android:textSize="20dp" />
<TextView
android:id="@+id/textView3"
android:layout_width="35dp"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="center_horizontal"
android:layout_row="1"
android:layout_weight="1"
android:textSize="20dp"
android:text="00" />
</LinearLayout>
<Button
android:id="@+id/button"
android:layout_width="95dp"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="fill_horizontal"
android:layout_row="2"
android:text="清零" />
<Button
android:id="@+id/start"
android:layout_width="95dp"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_gravity="fill_horizontal"
android:layout_row="2"
android:text="计时" />
<Button
android:id="@+id/stop"
android:layout_width="95dp"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_gravity="fill_horizontal"
android:layout_row="2"
android:text="停止" />
</GridLayout>