Android 四大组件之 Service

  1. 在 AS 中新建服务时,Exported 属性表示是否允许除了当前程序之外的其他程序访问这个服务,Enabled 属性表示是否启用这个服务。

  2. onStartCommand 方法会在每次服务启动的时候调用。通常情况下,如果我们希望服务一旦启动就立刻去执行某个动作,就可以将逻辑写在 onStartCommand 方法中。

  3. 启动和停止服务的方法
    startService(Intent intent)
    stopService(Intent intent)
    这两个方法都是定义在 Context 类中,可以在活动里直接调用这两个方法

另外,可以在 Service 的任何一个位置调用 stopSelf() 方法让服务停下来。

  1. startService 和 bindService 的区别
  • 执行 startService 时,Service 会经历 onCreate -> onStartCommand 。当执行stopService 时,直接调用onDestroy方法。
    执行bindService时,Service会经历onCreate->onBind。这个时候调用者和Service绑定在一起。调用者调用unbindService方法或者调用者Context不存在了(如Activity被finish了),Service就会调用onUnbind->onDestroy。这里所谓的绑定在一起就是说两者共存亡了。
  • 多次调用startService,该Service只能被创建一次,即该Service的onCreate方法只会被调用一次。但是每次调用startService,onStartCommand方法都会被调用。
    第一次执行bindService时,onCreate和onBind方法会被调用,但是多次执行bindService时,onCreate和onBind方法并不会被多次调用,即并不会多次创建服务和绑定服务。
    *onBind回调方法将返回给客户端一个IBinder接口实例,IBinder允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。我们需要IBinder对象返回具体的Service对象才能操作,所以说具体的Service对象必须首先实现Binder对象。
  • 既调用 startService 又调用 bindService


  • 本地服务与远程服务


  1. 活动和服务间的通信
  • Service 中的 onBind 方法返回null,表示客户端不能建立到此服务的连接。
  • 当一个活动和服务绑定了之后,就可以调用该服务里的 Binder 提供的方法了。
  • onBind(Intent) 这个方法 返回了一个实现了 IBinder 接口的对象,这个对象将用于绑定Service 的 Activity 与 Service 通信。
  1. 每个服务都只会存在一个实例,所以不管你调用了多少次 startService()方法,只需调用一次 stopService() 或 stopSelf() 方法,服务就会停止下来。

  2. 根据 Android 系统的机制,一个服务只要被启动或被绑定之后,就会一直处于运行状态,必须要让以上两种条件同时不满足才可以被销毁。所以,这种情况下要同时调用 stopService() 和 unbindService() 方法, onDestroy() 方法才能执行。

  3. IntentService 类
    服务中的代码是默认运行在主线程当中的,如果直接在服务里去处理一些耗时的逻辑,就很容易出现 ANR 的情况。为了可以简单地创建一个异步的、会自动停止的服务,Android 专门提供了一个 IntentService 类

  4. 前台服务

你可能感兴趣的:(Android 四大组件之 Service)