Android基础知识(十二):Service简介与基本用法

Android基础知识(十二):Service简介与基本用法

一、Service简介
Service是Android中实现程序后台运行的解决方案,用于后台完成用户指定的操作,其非常适合用于执行那些不需要和用户交互而且还要求长时间运行的任务。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开另一个应用程序,服务依旧可以保持正常运行。
需要注意的是,Service并不是运行在一个独立的进程中,而是依赖于创建服务是所在的应用程序进程。当某个应用程序被kill时,所有依赖于该进程的服务也会停止运行。
Service实际上并不会自动开启线程,所有的代码都是默认运行在主线程中,因此需要在服务的内部手动创建子线程,并在子线程中执行具体的任务,否则可能出现主线程被阻塞的情况。
在这里插入图片描述

二、Service基本用法

  1. Service定义与注册
    Service的定义如下所示,其中的onBind()方法是Service类的抽象方法,该方法在后面Activity与Service进行通信中将会进行介绍。服务中处理逻辑,需要重写onCreate()、onStartCommand()和onDestroy()方法,这是服务最为常用的3个方法。
    其中onCreate()方法会在服务创建时调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法在服务被销毁时调用,可进行回收不再使用的资源。
    在这里插入图片描述
    需要注意的是,onCreate()方法只有在Service被第一创建的时候被调用,而onStartCommand()方法则是在服务每次启动的时候被调用
    在这里插入图片描述
    作为Android四大组件之一,Service需要在AndroidManifest.xml进行注册才能生效。如下图所示,其中
    enabled表示是否启用这个服务,exported表示是否允许除了当前程序之外的其他程序访问这个服务

    在这里插入图片描述
  2. 启动与停止服务
    服务的启动和停止如下代码所示。除了在Context中的stopService方法能够停止服务之外,Service类中的stopSelf()方法同样可以停止服务。
    在这里插入图片描述
  3. Activity与Service进行通信
    使用上述的方法可以在Activity中启动和停止Service,但是Service中逻辑处理和Activity完全隔绝,无法进行通信。
    Binder则是用于Activity与Service进行通信的对象。Binder的实现简单例子如下所示。
    在这里插入图片描述
    绑定服务以及解绑服务如下图所示。绑定服务中的创建一个ServiceConnection类对象,该对象用于Activity对Service进行操作。其中onServiceConnected方法在Activity与Service成功绑定的时候调用onServiceDisconnected方法在Activity与Service的连接断开时调用
    bindService函数用于绑定服务,第一个参数为intent对象,第二个参数为创建的ServiceConnection实例,第三个参数是一个标志为。
    在这里插入图片描述

三、Service——启动和绑定的区别

  1. Service分类
    Service可以分为两类:started(启动)和bound(绑定)。
  1. started(启动):当应用程序组件调用startService()方法启动服务时,服务处于started状态。
  2. bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。
  1. startService()与bindService()的区别
    started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即启动服务的组件已经销毁。因此服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止
    使用bindService()方法启动服务,调用者与服务绑定在一起,调用者一旦退出,服务也就终止
    在这里插入图片描述

参考资料:《第一行代码 Android 第2版》
Android之四大组件、六大布局、五大存储

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/89478118