文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-22 03:41

关注

这篇文章主要介绍了android studio如何绑定服务和线程实现计时器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

实验目的:

熟悉和掌握Android线程的使用

实验要求:

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

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

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

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

实验代码:

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=count%100;            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

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"    >    <TextView        android:id="@+id/textview"        android:layout_gravity="center_horizontal"        android:text="计时器"        android:textSize="46sp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"/>        <TextView        android:id="@+id/textview_2"        android:gravity="center"        android:textSize="54sp"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <LinearLayout        android:layout_gravity="center_horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content">        <Button            android:id="@+id/bt_clear"            android:text="清零"            android:textSize="36sp"            android:layout_width="wrap_content"            android:layout_height="wrap_content"/>        <Button            android:id="@+id/bt_stop"            android:text="暂停"            android:textSize="36sp"            android:layout_width="wrap_content"            android:layout_height="wrap_content"/>        <Button            android:id="@+id/bt_start"            android:text="计时"            android:textSize="36sp"            android:layout_width="wrap_content"            android:layout_height="wrap_content"/>    </LinearLayout></LinearLayout>

感谢你能够认真阅读完这篇文章,希望小编分享的“android studio如何绑定服务和线程实现计时器”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯