Android Service生命周期详解

作者:chongyucaiyan 时间:2022-03-21 13:13:55 

前言

Service是Android系统的四大组件之一。在Android系统中,Service可以用来执行一些需要在后台长期运行的任务,也可以用来为其它应用提供一些服务。Service的使用方式主要有两种:startService()和bindService()。这两种方式下Service的生命周期不大相同。通过熟悉Service的生命周期,我们可以更加深刻地理解Android系统中Service的工作机制。

基础知识

一个Service不是一个单独的进程。Service本身不是运行在一个单独的进程中,除非在AndroidManifest.xml文件中指定了android:process属性。默认情况下,Service运行在应用所在的那个进程中。一个Service也不是一个线程。Service运行在应用的主线程中,所以如果要执行耗时的后台任务那么需要在子线程之中执行。

Service的生命周期

根据使用方式的不同,Service的生命周期可以分成2条路径,具体可以看下面这张引用自Android官网的图:

Android Service生命周期详解

下面详细分析一下这些回调方法。

  • onCreate() 当Service被创建时回调。如果Service已经在运行,那么不会回调onCreate()方法。在onCreate()方法中,我们可以做一些初始化操作。

  • onStartCommand() 当有组件调用startService()方法启动Service时回调。在onStartCommand()方法中,我们可以执行后台任务。由于Service是运行在主线程之中的,所以如果是耗时的任务那么需要使用子线程来执行任务。在Service完成任务之后,需要有组件调用stopService()方法来停止Service,或者由Service调用stopSelf()方法来自行停止。

  • onBind() 当有组件调用bindService()方法与Service绑定时回调。在onBind()方法中,你可以通过返回一个IBinder对象来提供一个接口供客户端与Service进行通信。

  • onUnbind() 当客户端调用unbindService()方法与Service解除绑定时回调。

  • onDestroy() 当Service停止运行将被销毁时回调。当有组件调用startService()方法来启动Service时,Service开始运行。直到有组件调用stopService()方法来停止Service,或者由Service调用stopSelf()方法来自行停止。当有组件调用bindService()方法与Service绑定时,Service开始运行。直到所有的客户端与Service解绑时,Service停止运行。在onDestroy()方法中,我们应该释放所有的资源,比如子线程、注册的 * 和广播 * 等。

  • https://developer.android.com/reference/android/app/Service.html

  • https://developer.android.com/guide/components/services.html

来源:https://blog.csdn.net/u012317510/article/details/76167748

标签:Android,Service
0
投稿

猜你喜欢

  • java接口Array介绍

    2021-06-04 16:01:25
  • Java实现人机猜拳游戏

    2023-10-16 08:47:56
  • java中MultipartFile互转File的方法

    2022-12-14 16:52:09
  • Android开发中Toast显示消息的方法小结

    2023-07-31 20:29:14
  • springboot+zookeeper实现分布式锁的示例代码

    2022-02-05 08:48:48
  • Java实战个人博客系统的实现流程

    2023-04-12 02:32:44
  • (starters)springboot-starter整合阿里云datahub方式

    2023-03-12 06:28:16
  • Android判断当前App是在前台还是在后台

    2022-09-20 10:37:49
  • Flutter中http请求抓包的完美解决方案

    2023-08-22 18:47:47
  • Java基础语法之二维数组详解

    2023-05-09 16:49:20
  • IntelliJ IDEA 2017.1.4 x64配置步骤(介绍)

    2022-02-25 13:48:48
  • java Matcher匹配头尾截取替换字符串的案例

    2023-01-30 11:44:48
  • Android Splash界面白屏、黑屏问题的解决方法

    2022-03-24 07:14:44
  • SpringMVC HttpMessageConverter消息转换器

    2023-01-13 04:57:45
  • java中this与super关键字的使用方法

    2022-05-04 22:03:29
  • Java枚举类型enum的详解及使用

    2023-08-02 14:23:57
  • Android Tab标签的使用基础

    2023-11-21 18:10:03
  • C#中的随机数函数Random()

    2022-05-11 08:07:15
  • 利用Jackson解决Json序列化和反序列化问题

    2023-02-16 14:59:54
  • 解决Maven项目中 Invalid bound statement 无效的绑定问题

    2021-08-13 10:30:41
  • asp之家 软件编程 m.aspxhome.com