服务简介

作者: 大话程序 | 来源:发表于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销毁服务

    相关文章

      网友评论

        本文标题:服务简介

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