• 服务的基本用法


    定义一个服务

         新增一个MyService的类,并继承自Service,如下:

          目前MyService中可以算式空空如也,但是有一个onBind()方法,这个方法是Service中唯一的一个抽象方法,所以必须在子类中实现。既然定义一个服务,自然会去处理一些事情,那么事情的处理应该写在哪里呢?可以重写Service中的一些方法,onCreate(),onStartCommand(),onDestroy()这三个方法,它们是服务中最常用的三个方法。onCreate()是服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候调用。如果服务一启动就立刻执行某个动作,就可以将逻辑写在onStartCommand()方法中,而当服务销毁时,可以在onDestroy()方法中回收那些不再使用的资源。每一个服务都需要在AndroidMainfest.xml中注册才能生效,如下:

    这样的 话,一个服务就定义好了。

    启动和停止服务

          启动和停止服务主要借助Intent来实现,在项目中实践,去启动和停止MyService这个服务,首先,修改activity_main.xml中的代码:

       

    修改MainActivity中的代码,如下:

    服务的onCreate()方法是在服务第一次创建的时候调用的,而onStartCommand()方法则是在每次启动服务的时候都会调用。

    活动和服务通信

          可以在活动中控制服务,这就需要借助服务中的onBind()方法。比如,希望在MyService里提供一个下载的功能,然后活动中可以决定何时开始下载,以及随时查看下载进度。实现这个功能的思路是创建一个专门的Binder对象来对下载功能进行管理,MyService中的代码如下所示:

    在DownloadBinder中提供了两个提供下载以及查看下载进度的方法,当让都是模拟方法,并没有实现真正的功能,然后修改activity_main.xml中的代码:

      

    当一个活动和一个服务绑定之后,就可以调用服务里的Binder提供的方法了,修改MainActivity中的代码:

          首先创建了一个ServiceConnection的匿名类,在里面重写了onServiceDisconnected()和onServiceConnected()方法,这两个方法分别在活动与服务成功绑定以及解除绑定的时候调用。在onServiceConnected()方法中又通过向下转型得到DownloadBinder的实例,有了这个实例,活动和服务之间的关系就变得十分紧密了。

    bindService(bindIntent,connection,BIND_AUTO_CREATE);中的第三个参数表示活动和服务进行绑定之后自动创建服务。

          

       

         

  • 相关阅读:
    05-3. 六度空间 (PAT)
    05-2. Saving James Bond
    05-1. List Components (PAT)
    04-3. Huffman Codes (PAT)
    04-2. File Transfer (PAT)
    04-1. Root of AVL Tree (PAT)
    03-3. Tree Traversals Again (PAT)
    03-2. List Leaves (PAT)
    03-1. 二分法求多项式单根(PAT)
    CDH Namenode自动切换(active-standby)
  • 原文地址:https://www.cnblogs.com/hujingwei/p/5116542.html
Copyright © 2020-2023  润新知