• Android计时器


    熟悉和掌握Android线程的使用

    实验要求:

    完成一个秒表,具备启停功能,正确使用工作线程完成界面刷新

    分析秒表的计时是否准确,原因是什么,如何保证秒表计时准确

    代码实现:

    (1)Activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="秒表"
            android:textSize="30dp"
            android:paddingTop="80dp"/>
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
    
            <TextView
                android:id="@+id/tv_min"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="25dp"
                android:text="00"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="25dp"
                android:text=":"/>
            <TextView
                android:id="@+id/tv_seconds"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="25dp"
                android:text="00"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="25dp"
                android:text=":"/>
            <TextView
                android:id="@+id/tv_ms"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="25dp"
                android:text="00"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
    
            <Button
                android:id="@+id/btn_clean"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="清零"
                android:textSize="20dp"/>
    
            <Button
                android:id="@+id/btn_count"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="计时"
                android:textSize="20dp"/>
    
            <Button
                android:id="@+id/btn_stop"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="停止"
                android:textSize="20dp"/>
    
        </LinearLayout>
    </LinearLayout>

    (2)MainActivity.java文件

    package com.example.administrator.myapplication5;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Handler;
    import android.os.IBinder;
    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 Activity {
        private static Handler handler=new Handler();
    
        private static TextView tv_minus;
        private static TextView tv_seconds;
        private static TextView tv_ms;
        public static int minuts;
        public static int seconds;
        public static int mseconds;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tv_minus=(TextView)findViewById(R.id.tv_min);
            tv_seconds=(TextView)findViewById(R.id.tv_seconds);
            tv_ms=(TextView)findViewById(R.id.tv_ms);
            final Button btn_clean=(Button)findViewById(R.id.btn_clean);
            final Button btn_count=(Button)findViewById(R.id.btn_count);
            final Button btn_stop=(Button)findViewById(R.id.btn_stop);
            final Intent serviceIntent=new Intent(this,CountService.class);
    
            btn_clean.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    System.out.println("thisisatestsssss");
                    tv_minus.setText("00");
                    tv_seconds.setText("00");
                    tv_ms.setText("00");
                }
            });
            btn_count.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    startService(serviceIntent);//显示启动service
                }
            });
    
            btn_stop.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    stopService(serviceIntent);//停止service
                }
            });
        }
    
        public static void UpdateGUI(int m,int s,int ms){
            minuts=m;
            seconds=s;
            mseconds=ms;
            handler.post(RefreshLable);
        }
    
        static Runnable RefreshLable=new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(50);
                    tv_minus.setText(String.format("%02d",minuts));
                    tv_seconds.setText(String.format("%02d",seconds));
                    tv_ms.setText(String.format("%02d",mseconds%100));
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
            }
        };
    }

    (3)CountService.Java文件

    package com.example.administrator.myapplication5;
    
    import android.app.Service;
    import android.content.Intent;
    //import android.icu.util.Calendar;
    import android.os.IBinder;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.TextView;
    
    import java.util.Calendar;
    
    /**
     * Created by lh on 2018/10/22.
     */
    
    public class CountService extends Service {
        private Thread workThread;
        long startTime=System.currentTimeMillis();
    
        @Override
        public void onCreate() {
            super.onCreate();
            workThread=new Thread(null,backgroundThread,"workThread");
    
        }
    
        @Override
        public void onStart(Intent intent,int startId) {
            super.onStart(intent,startId);
            if(!workThread.isAlive()){
                workThread.start();
            }
        } 
        @Override
        public void onDestroy() {
            super.onDestroy();
            workThread.interrupt();
        }
    
        @Override
        public IBinder onBind(Intent intent){
            return null;
    
        }
        private Runnable backgroundThread=new Runnable() {
            @Override
            public void run() {
    
                try{
                    while(!Thread.interrupted()){
                        long currentTime=System.currentTimeMillis();
                        long time=currentTime-startTime;
                        long m=time/(1000*60);
                        long s=time/1000;
                        long ms=time%1000;
                        int mi=(int)m;
                        int si=(int)s;
                        int msi=(int)ms;
                        MainActivity.UpdateGUI(mi,si,msi);
                        workThread.sleep(50);
    
                    }
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        };
    }

    (4)AndroidManifest.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.administrator.myapplication5">
    
        <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=".CountService"/>
    
        </application>
    
    </manifest>

    总结:

    setText()括号内应该是String类型

    System.currentTimeMillis()函数来获取系统时间

     

  • 相关阅读:
    dom4j解析xml字符串实例
    使用Dom4j生成xml文件(utf-8编码)
    viewer.js插件简单使用说明
    html标签title属性效果优化
    XML文件读写编码不是UTF-8的问题
    webservice wsdl文件标签讲解
    定销房概念扫盲
    Sql Server系列:视图
    Centos7安装mysql5.6
    java实现链式队列
  • 原文地址:https://www.cnblogs.com/loyolh/p/9954572.html
Copyright © 2020-2023  润新知