android开发分享Android实现秒表功能实例为大家分享了android实现秒表功能的具体代码,供大家参考,具体内容如下
上述就是android开发分享Android实现秒表功能的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
设计完成一个秒表,具备启停功能,正确使用工作线程完成界面刷新
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="秒表" android:textsize="30sp" /> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/_00_00_00" android:textsize="30sp" android:id="@+id/clock" /> </linearlayout> <linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center"> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="清零" android:id="@+id/init" /> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="计时" android:id="@+id/start" /> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" android:id="@+id/stop" /> </linearlayout> </linearlayout>
androidmanifest.xml
将activity,service在andoidmainfest.xml中注册
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.ex_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=".mainaactivity"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <service android:name=".timeservice"> </service> </application> </manifest>
timeservice.java
service服务
package com.example.ex_5; import android.app.service; import android.content.intent; import android.os.ibinder; import android.util.log; import androidx.annotation.nullable; import java.util.date; public class timeservice extends service { @nullable private date starttime = new date(); private long diff; public thread workthread; private runnable backgroundwork = new runnable() { @override public void run() { while(!thread.interrupted()){ date endtime = new date(); diff = endtime.gettime()-starttime.gettime(); mainactivity.updategui(diff); log.i("timeservice:the diff is",string.valueof(diff)); try { thread.sleep(0); } catch (interruptedexception e) { e.printstacktrace(); } } } }; @override public void oncreate() { super.oncreate(); log.i("timeservice","oncreate"); workthread=new thread(null,backgroundwork,"workthread"); } @override public void onstart(intent intent, int startid) { super.onstart(intent, startid); if(!workthread.isalive()){ workthread.start(); } log.i("timeservice","onstart"); } @override public void ondestroy() { super.ondestroy(); mainactivity.updategui(0); mainactivity.updatediff(diff); workthread.interrupt(); log.i("timeservice","ondestroy"); } public ibinder onbind(intent intent) { return null; } }
mainactivity.java
注册按钮响应事件,更新ui界面
package com.example.ex_5; import android.content.intent; import android.os.bundle; import android.os.handler; import android.util.log; import android.view.view; import android.widget.button; import android.widget.textview; import androidx.appcompat.app.appcompatactivity; import java.net.serversocket; public class mainactivity extends appcompatactivity { private static handler handler = new handler(); private static textview labelview = null; private static string time; private static long _diff = 0; //更新界面 public static void updategui(long diff) { diff += _diff; int hours = (int) diff / (1000 * 60 * 60); int minutes = (int) (diff - (hours * (1000 * 60 * 60))) / (1000 * 60); int seconds = (int) (diff - (hours * (1000 * 60 * 60)) - (minutes * (1000 * 60))) / 1000; time = hours + ":" + minutes + ":" + seconds; handler.post(refreshlable); } //供停止功能使用,用于记录服务结束之时的时间 public static void updatediff(long diff){ _diff = diff; } //settext public static runnable refreshlable = new runnable() { @override public void run() { labelview.settext(time); } }; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); button initbutton = findviewbyid(r.id.init); final button startbutton = findviewbyid(r.id.start); button stopbutton = findviewbyid(r.id.stop); labelview = findviewbyid(r.id.clock); final intent serviceintent = new intent(this, timeservice.class); startbutton.setonclicklistener(new button.onclicklistener() { public void onclick(view view) { log.i("mainactivity","clickstartbutton"); startservice(serviceintent); } }); stopbutton.setonclicklistener(new button.onclicklistener(){ @override public void onclick(view v) { log.i("the behead diff is",string.valueof(_diff)); log.i("mainactivity","clickstopbutton"); stopservice(serviceintent); } }); initbutton.setonclicklistener(new button.onclicklistener(){ @override public void onclick(view v) { log.i("mainactivity","clickinitbutton"); _diff = 0; string text = "00:00:00"; labelview.settext(text); stopservice(serviceintent); } }); } }
以上就是android开发分享Android实现秒表功能的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/1239381.html