android studio如何绑定服务和线程实现计时器
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍了android studio如何绑定服务和线程实现计时器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实验目的:熟悉
千家信息网最后更新 2025年02月02日android studio如何绑定服务和线程实现计时器
这篇文章主要介绍了android studio如何绑定服务和线程实现计时器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
实验目的:
熟悉和掌握Android
线程的使用
实验要求:
1.完成一个秒表,具备启停功能
2.通过绑定服务实现功能,通过Thread+handler更新界面
这章节没花什么时间去学,其他事情又很多,所以只是简单实现了一下,在生命周期那里还是有些没处理的地方,因此
主要思路是:在服务中启动一个线程实现计数的功能,并且每隔10ms
调用一下更新界面的函数,这需要用到Thread+handler
,当然还需要一些控制启停的公有函数供activity
调用,同过绑定的服务的方式,activity
中可以获得服务的实例,所以以activity作为控制器,对不同的按钮事件调用service
的控制启停的函数或者计数清零的函数,以此来实现计时器的功能。完成实验后发现这样实现的计时器精度比较粗糙,不过功能正常,更好的思路是使用时间函数,不过在本次实验的目的是练习线程和绑定服务的使用,因此没有继续改动。
实验代码:
MyService .java
package com.example.shiyan5;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class MyService extends Service { private final IBinder binder = new MyBinder(); private Thread workThread; private int count=0; private boolean c_stop=true; public MyService() { } public void clearcount() { count=0; } public void countstop(){ c_stop=true; } public void countstart(){ c_stop=false; } @Override public void onCreate() { super.onCreate(); workThread=new Thread(null,backgroundWork); workThread.start(); } @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } public class MyBinder extends Binder { MyService getService() { return MyService.this; } } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return binder; //throw new UnsupportedOperationException("Not yet implemented"); } private Runnable backgroundWork =new Runnable() { @Override public void run() { try { while(true) { if(c_stop==false) { count++; } MainActivity.UpdateGUI(count); Thread.sleep(10);//10毫秒计数一次Z } } catch (InterruptedException e) { e.printStackTrace(); } } };}
MainActivity.java
package com.example.shiyan5;import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends AppCompatActivity { static TextView textView1,textView2; Button bt_clear,bt_stop,bt_start; MyService mService; boolean mBound; static int count; static Handler handler=new Handler(); private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { MyService.MyBinder binder = (MyService.MyBinder) service; mService = binder.getService();//通过这个来获取服务的实例 mBound = true; } @Override public void onServiceDisconnected(ComponentName arg0) { mBound = false; } }; public static void UpdateGUI(int s_count) { count=s_count; handler.post(RefreshText); } private static Runnable RefreshText=new Runnable() { @Override public void run() { String sa,sb,sc; int a=count0; if(a<10)sa="0"+a;else sa=String.valueOf(a); int b=(count/100)%60; if(b<10)sb="0"+b;else sb=String.valueOf(b); int c=(count/100/60)%60; if(c<10)sc="0"+c;else sc=String.valueOf(c); textView2.setText(sc+":"+sb+":"+sa); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBound=false; textView1=(TextView) findViewById(R.id.textview); textView2=(TextView) findViewById(R.id.textview_2); bt_clear=(Button) findViewById(R.id.bt_clear); bt_stop=(Button) findViewById(R.id.bt_stop); bt_start=(Button) findViewById(R.id.bt_start); bt_clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mBound==true){ mService.clearcount(); mService.countstop(); } } }); bt_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mBound==true) { mService.countstart(); } } }); bt_stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mBound==true) { mService.countstop(); } } }); } @Override protected void onStart() { super.onStart(); Intent intent=new Intent(this,MyService.class); bindService(intent,connection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); unbindService(connection); mBound=false; }}
activity_main.xml
感谢你能够认真阅读完这篇文章,希望小编分享的"android studio如何绑定服务和线程实现计时器"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
服务
线程
函数
功能
实验
计时器
篇文章
控制
实例
思路
时间
界面
目的
更新
不同
粗糙
事件
事情
代码
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
燃烧远征任务数据库
工资运行后无法与数据库连接
备件管理软件开发
山东联通服务器租用
我的世界隐者服务器
螺旋模型是不是软件开发模型
打印服务器代理流程
河南存储服务器散热器定制云空间
广铁集团网络安全工作
网络技术对学生的促进作用
java的服务器文件上传和下载
zimbra邮箱服务器
数据库技术发展报告
网络电视连接的服务器是哪个
服务器如何停掉安全狗
软件开发的基本过程的目的是什么
办公应用软件开发的硬件要求
云服务器对比 价格
数据库查看监听程序
电厂网络安全防社工
数据库报表是什么意思
新浪潮互联租服务器
创造与魔法建服务器
数据库怎么在表内插入内容
服务器和业务系统哪个好
vb数据库生成exe文件
软件开发赚钱哪些
服务器如何加网卡
浪潮天梭服务器默认管理地址
电信同步服务器地址