Android四大组件之Service详解

作者:*是杯酒渐浓* 时间:2023-10-16 14:22:38 

一、Service简介

Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。

Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作。

二、Service生命周期

Android四大组件之Service详解

1.startService / stopService

生命周期顺序:onCreate->onStartCommand->onDestroy

OnCreate()

系统在service第一次创建时执行此方法,来执行只运行一次的初始化工作。如果service已经运行,这个方法不会被调用。

onStartCommand()

每次客户端调用startService()方法启动该Service都会回调该方法(多次调用)。一旦这个方法执行,service就启动并且在后台长期运行。通过调用stopSelf()或stopService()来停止服务。

OnDestory()

系统在service不再被使用并要销毁时调用此方法(一次调用)。service应在此方法中释放资源,比如线程,已注册的 * , * 等等.这是service收到的最后一个调用。

2.bindService / unbindService

生命周期顺序:onCreate->onBind->onUnBind->onDestroy

同样首先是OnCreate(),接着是

OnBind()

当组件调用bindService()想要绑定到service时(比如想要执行进程间通讯)系统调用此方法(一次调用,一旦绑定后,下次再调用bindService()不会回调该方法)。在你的实现中,你必须提供一个返回一个IBinder来以使客户端能够使用它与service通讯,你必须总是实现这个方法,但是如果你不允许绑定,那么你应返回null。

OnUnbind()

当前组件调用unbindService(),想要解除与service的绑定时系统调用此方法(一次调用,一旦解除绑定后,下次再调用unbindService()会抛出异常)。

最后是OnDestory()

注意:通过bindService启动的Service的生命周期依附于启动它的Context。

来源:https://blog.csdn.net/weixin_43560292/article/details/86669288

标签:android,service
0
投稿

猜你喜欢

  • Android评分控件RatingBar使用实例解析

    2022-02-07 14:17:03
  • java开发AOP面向切面编程入门

    2021-08-22 04:47:56
  • 解决ThingsBoard编译报错问题:Failure to find org.gradle:gradle-tooling-api:jar:6.3

    2021-11-20 16:24:22
  • SpringBoot 集成 activiti的示例代码

    2023-01-22 10:22:03
  • Spring Security中用JWT退出登录时遇到的坑

    2022-05-19 10:30:28
  • C#添加、获取、删除PDF附件实例代码

    2023-06-23 11:41:46
  • Android开发高仿课程表的布局实例详解

    2022-02-01 18:33:19
  • SpringDataJpa如何使用union多表分页条件查询

    2023-05-16 04:28:49
  • C#函数式编程中的部分应用详解

    2023-12-01 23:02:44
  • Java将String字符串带括号转成List的简单方法

    2022-10-26 18:20:17
  • 浅谈Java中向上造型向下造型和接口回调中的问题

    2023-11-09 13:51:46
  • springboot全局异常处理代码实例

    2023-02-05 20:41:36
  • C#实现简单的Login窗口实例

    2021-07-18 02:23:29
  • IDEA集成JProfiler11可视化工具的详细流程(安装、集成、测试)

    2021-12-12 04:05:35
  • Java实现抠图片文字或签名的完整代码

    2023-04-18 00:04:44
  • Spring boot @RequestBody数据传递过程详解

    2022-09-14 12:23:37
  • C#实现窗体全屏的两种方法

    2021-10-06 19:14:04
  • Java字符串操作和C#字符串操作的不同小结

    2022-02-15 07:21:14
  • Java日常练习题,每天进步一点点(55)

    2022-10-13 15:51:03
  • jar包手动添加到本地maven仓库的步骤详解

    2023-11-23 05:09:37
  • asp之家 软件编程 m.aspxhome.com