android studio如何绑定服务和线程实现计时器(android,studio,开发技术)

时间:2024-05-10 08:36:03 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

实验目的:

熟悉和掌握Android线程的使用

实验要求:

  • 1.完成一个秒表,具备启停功能

  • 2.通过绑定服务实现功能,通过Thread+handler更新界面

这章节没花什么时间去学,其他事情又很多,所以只是简单实现了一下,在生命周期那里还是有些没处理的地方,因此

主要思路是:在服务中启动一个线程实现计数的功能,并且每隔10ms调用一下更新界面的函数,这需要用到Thread+handler,当然还需要一些控制启停的公有函数供activity调用,同过绑定的服务的方式,activity中可以获得服务的实例,所以以activity作为控制器,对不同的按钮事件调用service的控制启停的函数或者计数清零的函数,以此来实现计时器的功能。完成实验后发现这样实现的计时器精度比较粗糙,不过功能正常,更好的思路是使用时间函数,不过在本次实验的目的是练习线程和绑定服务的使用,因此没有继续改动。

android studio如何绑定服务和线程实现计时器

android studio如何绑定服务和线程实现计时器

实验代码:

MyService .java

packagecom.example.shiyan5;importandroid.app.Service;importandroid.content.Intent;importandroid.os.Binder;importandroid.os.IBinder;publicclassMyServiceextendsService{privatefinalIBinderbinder=newMyBinder();privateThreadworkThread;privateintcount=0;privatebooleanc_stop=true;publicMyService(){}publicvoidclearcount(){count=0;}publicvoidcountstop(){c_stop=true;}publicvoidcountstart(){c_stop=false;}@OverridepublicvoidonCreate(){super.onCreate();workThread=newThread(null,backgroundWork);workThread.start();}@OverridepublicbooleanonUnbind(Intentintent){returnsuper.onUnbind(intent);}publicclassMyBinderextendsBinder{MyServicegetService(){returnMyService.this;}}@OverridepublicIBinderonBind(Intentintent){//TODO:Returnthecommunicationchanneltotheservice.returnbinder;//thrownewUnsupportedOperationException("Notyetimplemented");}privateRunnablebackgroundWork=newRunnable(){@Overridepublicvoidrun(){try{while(true){if(c_stop==false){count++;}MainActivity.UpdateGUI(count);Thread.sleep(10);//10毫秒计数一次Z}}catch(InterruptedExceptione){e.printStackTrace();}}};}

MainActivity.java

packagecom.example.shiyan5;importandroidx.appcompat.app.AppCompatActivity;importandroid.content.ComponentName;importandroid.content.Context;importandroid.content.Intent;importandroid.content.ServiceConnection;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.IBinder;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;publicclassMainActivityextendsAppCompatActivity{staticTextViewtextView1,textView2;Buttonbt_clear,bt_stop,bt_start;MyServicemService;booleanmBound;staticintcount;staticHandlerhandler=newHandler();privateServiceConnectionconnection=newServiceConnection(){@OverridepublicvoidonServiceConnected(ComponentNameclassName,IBinderservice){MyService.MyBinderbinder=(MyService.MyBinder)service;mService=binder.getService();//通过这个来获取服务的实例mBound=true;}@OverridepublicvoidonServiceDisconnected(ComponentNamearg0){mBound=false;}};publicstaticvoidUpdateGUI(ints_count){count=s_count;handler.post(RefreshText);}privatestaticRunnableRefreshText=newRunnable(){@Overridepublicvoidrun(){Stringsa,sb,sc;inta=count%100;if(a<10)sa="0"+a;elsesa=String.valueOf(a);intb=(count/100)%60;if(b<10)sb="0"+b;elsesb=String.valueOf(b);intc=(count/100/60)%60;if(c<10)sc="0"+c;elsesc=String.valueOf(c);textView2.setText(sc+":"+sb+":"+sa);}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){if(mBound==true){mService.clearcount();mService.countstop();}}});bt_start.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){if(mBound==true){mService.countstart();}}});bt_stop.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){if(mBound==true){mService.countstop();}}});}@OverrideprotectedvoidonStart(){super.onStart();Intentintent=newIntent(this,MyService.class);bindService(intent,connection,Context.BIND_AUTO_CREATE);}@OverrideprotectedvoidonStop(){super.onStop();unbindService(connection);mBound=false;}}

activity_main.xml

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/textview"android:layout_gravity="center_horizontal"android:text="计时器"android:textSize="46sp"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/textview_2"android:gravity="center"android:textSize="54sp"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayoutandroid:layout_gravity="center_horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:id="@+id/bt_clear"android:text="清零"android:textSize="36sp"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/bt_stop"android:text="暂停"android:textSize="36sp"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/bt_start"android:text="计时"android:textSize="36sp"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout></LinearLayout>
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:android studio如何绑定服务和线程实现计时器的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何实现Qt地图自适应拉伸下一篇:

16 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18