简单介绍一下Android中Service的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34942689/article/details/78928724

前言
Android中存在四大组件,Activity,BroadCastReceiver,Service,ContentProvider,作为Android中的四大组件,我们在每一个项目中对于他们的其中一个或者多个使用都是必不可少的,比如activity,它是布局的容器,要让用户能够操作和交互那就是必不可少的,今天就来介绍一下Android四大组件之一的Service。
Service 美其名曰服务是也,我们都知道在Android使用过程中,很多时候会有一些类似后台下载文件或者是类似推送的监控那样实时的有一个介质去监控或者去接收别的地方发送过来的东西。那么我们便可以很好的利用service来实现这一系列的功能需求。
首先第一步:创建service
新建一个类继承与Service,重写其OnBind,OnCreate,onStartCommand,onDestroy方法。
OnBind方法:当另一个组件想通过调用 bindService() 与服务绑定(例如执行 RPC)时,系统将调用此方法。在此方法的实现中,必须返回 一个IBinder 接口的实现类,供客户端用来与服务进行通信。无论是启动状态还是绑定状态,此方法必须重写,但在启动状态的情况下直接返回 null
onStartCommand方法: 当另一个组件(如 Activity)通过调用 startService() 请求启动服务时,系统将调用此方法。一旦执行此方法,服务即会启动并可在后台无限期运行。 如果自己实现此方法,则需要在服务工作完成后,通过调用 stopSelf() 或 stopService() 来停止服务。(在绑定状态下,无需实现此方法)。
OK在创建完成Service之后我们需要做的就是把我们创建的Service使用起来,这里service的启动使用方式一共有两种,分别是startService,bindService两种方式分别有其优点和缺点
startservice:启动方式为直接实现intent传递然后调用ContextWrapper的startservice方法就可以直接启动
bindservice:bindservice的方式和start的启动方式有一定的区别,首先我们需要创建一个ServiceConnection用来监测该服务是否创建,代码如下

public class MyConn implements  ServiceConnection{
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
       //服务已经连接
    }
    @Override
    public void onServiceDisconnected(ComponentName name) {
    //服务已断开连接
    }
}

bindservice时一共有三个参数,第一个和startservice一样的是intent 第二个是ServiceConnection,第三个是常量BIND_AUTO_CREATE。
以上两种方式的区别在于bindservice会跟随组件的生命周期,当其创建是创建 销毁时销毁,所以我们再使用bindservice的时候需要在onDestroy方法中使用unbindService方法解除绑定。在使用startservice的时候需要在清单文件中对service进行注册。上一步我们说到的onBind方法在bindservice中就有很大的作用,我们需要把其对象获取到并且回调给外层引用

猜你喜欢

转载自blog.csdn.net/qq_34942689/article/details/78928724