zoukankan      html  css  js  c++  java
  • 服务的基本用法

    定义一个服务

         新增一个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);中的第三个参数表示活动和服务进行绑定之后自动创建服务。

          

       

         

  • 相关阅读:
    C++顺序性容器、关联性容器与容器适配器
    Groovy与Java集成常见的坑--转
    selenium打开chrome浏览器代码
    分组密码的工作模式--wiki
    linux下C语言多线程编程实例
    C语言多线程pthread库相关函数说明
    C语言使用pthread多线程编程(windows系统)二
    C语言使用pthread多线程编程(windows系统)一
    使用_beginThreadex创建多线程(C语言版多线程)
    浅谈C语言中的联合体
  • 原文地址:https://www.cnblogs.com/hujingwei/p/5116542.html
Copyright © 2011-2022 走看看