Android四大组件:Service史上最全面解析

来源:互联网 发布:微软最小的windows系统 编辑:程序博客网 时间:2024/05/19 22:56

前言

  • Service作为Android四大组件之一,应用非常广泛
  • 本文将介绍对Service进行全面介绍(基础认识、生命周期、使用和应用场景)

目录

目录


1. 基础知识

  • 定义:服务,属于Android中的计算型组件
  • 作用:提供需要在后台长期运行的服务(如复杂计算、下载等等)
  • 特点:长生命周期的、没有用户界面、在后台运行

2. 生命周期方法详解

具体请看我写的文章:Android:Service生命周期最全面解析


3. Service分类

3.1 Service的类型

分类

3.2 详细介绍

Service类型的详细介绍

4. Service的使用解析

由上述可知,服务Service总共分为:

分类

接下来,我将介绍每种Service的具体使用,具体请看我写的文章:Android:(本地、可通信的、前台、远程)Service使用全面介绍

5. 使用场景

  • 通过上述描述,你应该对Service类型及其使用非常了解;
  • 那么,我们该什么时候用哪种类型的Service呢?
  • 各种Service的使用场景请看下图: 
    使用场景

6. 其他思考

6.1 Service和Thread的区别

  • 结论:Service和Thread之间没有任何关系
  • 之所以有不少人会把它们联系起来,主要因为Service的后台概念

    后台的定义:后台任务运行完全不依赖UI,即使Activity被销毁,或者程序被关闭,只要进程还在,后台任务就可以继续运行

  • 其实二者存在较大的区别,如下图: 
    Paste_Image.png

一般来说,会将Service和Thread联合着用,即在Service中再创建一个子线程(工作线程)去处理耗时操作逻辑,如下代码:

@Override  public int onStartCommand(Intent intent, int flags, int startId) {  //新建工作线程    new Thread(new Runnable() {          @Override          public void run() {              // 开始执行后台任务          }      }).start();      return super.onStartCommand(intent, flags, startId);  }  class MyBinder extends Binder {      public void service_connect_Activity() {    //新建工作线程        new Thread(new Runnable() {              @Override              public void run() {                  // 执行具体的下载任务              }          }).start();      }  }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24


7 Service生命周期最全面解析

目录

目录


1. 生命周期常用方法

在Service的生命周期里,常用的有:

  • 4个手动调用的方法
手动调用方法作用startService()启动服务stopService()关闭服务bindService()绑定服务unbindService()解绑服务
  • 5个内部自动调用的方法
内部自动调用的方法作用onCreat()创建服务onStartCommand()开始服务onDestroy()销毁服务onBind()绑定服务onUnbind()解绑服务

2. 生命周期方法具体介绍

主要介绍内部调用方法和外部调用方法的关系。

2.1 startService()

  • 作用:启动Service服务
  • 手动调用startService()后,自动调用内部方法:onCreate()、onStartCommand()
  • 调用逻辑如下: 
    调用逻辑

2.2 stopService()

  • 作用:关闭Service服务
  • 手动调用stopService()后,自动调用内部方法:onDestory()
  • 调用的逻辑:

调用逻辑

2.3 bindService()

  • 作用:绑定Service服务
  • 手动调用bindService()后,自动调用内部方法:onCreate()、onBind()
  • 调用的逻辑:

调用的逻辑

2.4 unbindService()

  • 作用:解绑Service服务
  • 手动调用unbindService()后,自动调用内部方法:onCreate()、onBind()、onDestory()
  • 调用的逻辑: 
    调用的逻辑

3. 常见的生命周期使用

3.1 只使用startService启动服务的生命周期

startService启动服务的生命周期

3.2 只使用BindService绑定服务的生命周期

BindService绑定服务的生命周期

3.3 同时使用startService()启动服务、BindService()绑定服务的生命周期

Paste_Image.png

3.4 特别注意

  • startService()和stopService()只能开启和关闭Service,无法操作Service; 

    bindService()和unbindService()可以操作Service

  • startService开启的Service,调用者退出后Service仍然存在; 
    BindService开启的Service,调用者退出后,Service随着调用者销毁。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
0 0
原创粉丝点击