IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android四个组件---Service -> 正文阅读

[移动开发]Android四个组件---Service

一、Service简介

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

二、按使用方式分类:(还有其它分类方式)

三、生命周期

?

?OnCreate()

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

onStartCommand()

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

OnBind()

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

OnUnbind()

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

OnDestory()

系统在service不再被使用并要销毁时调用此方法(一次调用)。service应在此方法 中释放资源,比如线程,已注册的侦听器,接收器等等.这是service收到的最后一 个调用。 下面介绍三种不同情况下Service的生命周期情况。

1.startService / stopService

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

如果一个Service被某个Activity 调用 Context.startService方法启动,那么不管是否 有Activity使用bindService绑定或unbindService解除绑定到该Service,该Service都 在后台运行,直到被调用stopService,或自身的stopSelf方法。当然如果系统资源 不足,android系统也可能结束服务,还有一种方法可以关闭服务,在设置中,通过 应用->找到自己应用->停止。

注意点:

①第一次 startService 会触发 onCreate 和 onStartCommand,以后在服务运行过 程中,每次 startService 都只会触发 onStartCommand

②不论 startService 多少次,stopService 一次就会停止服务

2.bindService / unbindService

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

如果一个Service在某个Activity中被调用bindService方法启动,不论bindService被 调用几次,Service的onCreate方法只会执行一次,同时onStartCommand方法始终 不会调用。

当建立连接后,Service会一直运行,除非调用unbindService来接触绑定、断开连 接或调用该Service的Context不存在了(如Activity被Finish——即通过bindService 启动的Service的生命周期依附于启动它的Context),系统在这时会自动停止该 Service。

注意点:

第一次 bindService 会触发 onCreate 和 onBind,以后在服务运行过程中,每次 bindService 都不会触发任何回调

3.混合型(上面两种方式的交互)

当一个Service在被启动(startService)的同时又被绑定(bindService),该Service将 会一直在后台运行,并且不管调用几次,onCreate方法始终只会调用一次, onStartCommand的调用次数与startService调用的次数一致(使用bindService方法 不会调用onStartCommand)。同时,调用unBindService将不会停止Service,必 须调用stopService或Service自身的stopSelf来停止服务。

在什么情况下使用 startService 或 bindService 或 同时使用 startService 和 bindService?

① 如果你只是想要启动一个后台服务长期进行某项任务那么使用 startService 便可 以了。

② 如果你想要与正在运行的 Service 取得联系,那么有两种方法,一种是使用 broadcast ,另外是使用 bindService ,前者的缺点是如果交流较为频繁,容易造 成性能上的问题,并且 BroadcastReceiver 本身执行代码的时间是很短的(也许执 行到一半,后面的代码便不会执行),而后者则没有这些问题,因此我们肯定选择 使用 bindService(这个时候你便同时在使用 startService 和 bindService 了,这在 Activity 中更新 Service 的某些运行状态是相当有用的)。

③ 如果你的服务只是公开一个远程接口,供连接上的客服端(android 的 Service 是C/S架构)远程调用执行方法。这个时候你可以不让服务一开始就运行,而只用 bindService ,这样在第一次 bindService 的时候才会创建服务的实例运行它,这会 节约很多系统资源,特别是如果你的服务是Remote Service,那么该效果会越明显 (当然在 Service 创建的时候会花去一定时间,你应当注意到这点)。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:57:05  更:2021-08-06 09:58:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/5 22:50:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码