• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
seven_hu
博客园    首页    新随笔    联系   管理    订阅  订阅

服务的基本用法

定义一个服务

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

 

      

   

     

posted @ 2016-01-09 15:23  seven_hu  阅读(396)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3