服务简介

作者: 大话程序 | 来源:发表于2016-09-29 08:51 被阅读83次

服务Service

就是默默运行在后台的组件,可以理解为是没有前台的activity,适合用来运行不需要前台界面的代码

服务可以被手动关闭,不会重启,但是如果被自动关闭,内存充足就会重启

开启服务的两种方式

服务对象是不可以被new滴,只能依靠系统来创建服务对象

  • startService()
    • 该方法启动的服务所在的进程属于服务进程。
    • 服务一旦启动,服务便和活动没有关系
  • bindService()
    • 该方法启动的服务所在的进程不属于服务进程。
    • Activity与服务建立连接,服务与启动它的Activity同生共死
    • 任何一个服务在整个应用程序范围内都是通用的,单例设计模式,一个服务可以和多个Activity绑定
    • 绑定服务和解绑服务的生命周期方法:onCreate->onBind->onUnbind->onDestroy

活动和服务进行通信

使用startService()方式启动服务,服务是不能和活动进行通信,必须使用bindService()方式启动服务(活动和服务进行绑定),才可以实现活动和服务进行通信

  • 调用bindService (Intent service, ServiceConnection conn, int flags)方法将活动和服务进行绑定,此绑定方法有三个参数

    • Intent service:Intent意图对象

    • ServiceConnection conn:活动和服务的连接对象ServiceConnection

    • int flags:一个标志位

      Intent intent = new Intent(this, MyService.class);
       bindService(intent, conn, BIND_AUTO_CREATE);
      
  • 实现ServiceConnection接口,创建一个子类,实现接口的两个方法:onServiceConnected(ComponentName name, IBinder service)onServiceDisconnected(ComponentName name)

    • onServiceConnected(ComponentName name, IBinder service):服务连接成功时,此方法被调用

    • onServiceDisconnected(ComponentName name):服务失去连接时,此方法被调用

      class MyConnection implements ServiceConnection{
      
          @Override
          public void onServiceConnected(ComponentName name, IBinder service) {
              //绑定服务时,返回的Binder对象
              broker = (Broker)service;
          }
      
          @Override
          public void onServiceDisconnected(ComponentName name) {
              
          }
      
      

    }
    ```

  • 调用bindService()方法将活动和服务进行绑定,绑定的服务类中的public IBinder onBind(Intent intent)方法会被系统调用,传入的参数是绑定给服务的Activity,方法返回的是一个IBinder对象,此对象可通过连接对象中的onServiceConnected(ComponentName name, IBinder service)方法的参数IBinder service向下转型得到,通过此对象就可以实现活动和服务进行通信

    class Broker extends Binder{
        public void work(){
            money();
        }
    }
    

两种启动模式的混合使用

使用startService()方法启动的服务所在的进程属于服务进程,但活动和服务并没有进行连接,也无法去调用服务里的方法;使用bindService()方法启动的服务所在的进程不属于服务进程,服务和启动此活动的服务同生共死,活动和服务进行了连接,可以调用服务内部的方法。

  • 两种启动方式混合使用,调用startService()是为了使服务所在的进程属于服务进程,调用bindService()是为了可以和服务进行通信

  • 先调用startService()方法创建并启动服务,再调用bindService()方法绑定服务,欲销毁时,先调用unbindService()方法解绑服务,再调用stopService销毁服务

相关文章

  • 服务简介

    服务Service 就是默默运行在后台的组件,可以理解为是没有前台的activity,适合用来运行不需要前台界面的...

  • Centos7搭建DHCP服务器

    一、DHCP服务简介 ****1. DHCP服务简介**** DHCP(Dynamic Host Configur...

  • 微服务简介

    前言 在这个信息横纵交错的大数据时代,以前的单应用架构完全支撑不起现在的流量了,于是技术架构不断演变。现如今火爆的...

  • 微服务简介

    微服务从设计到部署(一)微服务简介 链接:https://github.com/oopsguy/microserv...

  • 微服务简介

    架构演进 单体应用实际上没什么架构的概念,所有的业务逻辑都在一个项目里打包成一个二进制的编译后文件,通过这个文件进...

  • 微服务简介

    微服务简介 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各...

  • 微服务简介

    在学习spring cloud构建微服务之前,我们先对比于单体架构来了解微服务的优势和不足。 单体架构 所谓单体应...

  • 微服务简介

    原文是 Martin Flower 于 2014 年 3 月 25 日写的《Microservices》。 微服务...

  • 简介awsIOT服务

    面向工业、消费者和商业解决方案的 IoT 服务 目录 AWS IoT Core 轻松安全地将设备连接到云。可靠地扩...

  • 微服务简介

网友评论

    本文标题:服务简介

    本文链接:https://www.haomeiwen.com/subject/vupkyttx.html