理解Service

简介: Service的start和bind有什么区别?Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其它组件和Service的交互。

Service的start和bind有什么区别?

Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其它组件和Service的交互。Service的这两种状态是可以共存的。
start启动的Service,Service有独立的生命周期,不依赖该组件;多次调用start方法,会重复调用onStartCommand方法;start启动的Service,必须通过stopService或者stopSelf来停止Service(IntentService会自动调用stopSelf方法)。
多次调用bind方法,只会调用一次onBind方法。bind绑定的Service,Service依赖于这些组件,这些组件全部销毁后,Service也随之销毁。

同一个Service,先startService,然后再bindService,如何把它停止掉?

不论被startService调用几次,只需stopService(或stopSelf方法)一次;调用n次bindService方法,必须调用n次unbindService方法。需要注意的是,若同一个组件多次bind一个Service,不需要多次调用unbind,只需要一次。
因此,需要调用一次 stopService(或stopSelf方法)和n次unbindService方法,执行顺序没有要求,最后一个 stopService或者unbindService方法会导致Service的onDestroy执行。

你有注意到 Service的onStartCommand方法的返回值吗?不同的返回值有什么区别?

一共有如下四种返回值:

  1. 为了兼容版本,在Service被杀死后,并不保证onStartCommand会被再一次调用。
public static final START_STICKY_COMPATIBILITY = 0
  1. Service被杀死后,保留启动状态,但不保存intent,之后系统会尝试重启该Service,并重新回调onStartCommand方法。
    如果接下来没有其它start命令,intent会为null。因此,要注意onStartCommand对intent的非空判断。
public static final int START_STICKY =1
  1. 常规操作,除非死之前还有组件调用startService,否则系统不会保留启动状态并重启该Service。
public static final int START_NOT_ STICKY = 2;
  1. Service被杀死后,系统将会组织一次Service重启(除非在那之前调用stopSelf()方法),被杀死前最后一次传递的intent将重新被执,该flag将不会传递空intent。
public static final in START_REDELIVER_INTENT = 3;

Service的生命周期方法 onCreateonStartonBind等运行在哪个线程?

Service默认是运行在主线程的,其生命周期方法也是运行在主线程。因此,如果想要在Service中执行耗时操作,必须另起线程(或者使用IntentService),否则可能会产生ANR。

目录
相关文章
|
3月前
|
存储 缓存 监控
阿里云服务器配置与云盘容量选择参考:实例规格、云盘等相关配置选择解析
对于初次接触云服务器的用户来说,面对众多配置选项和云盘容量选择,可能会不知道如何选择。有些用户甚至不清楚云服务器应该购买多大容量的云盘,也不知道哪一款配置的云服务器更适合自己的业务。本文将详细探讨这两个问题,并结合阿里云服务器的特点,为您提供一份云服务器配置与云盘容量选择指南,以供了解和选择参考。
|
9月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
295 3
|
4月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
148 12
|
11月前
|
自然语言处理 搜索推荐 算法
深入浅出:用Python打造个性化新闻聚合器
【8月更文挑战第29天】在信息爆炸的时代,快速获取和筛选感兴趣的新闻内容成为一项挑战。本文将引导你使用Python构建一个简单的个性化新闻聚合器,从而高效地从海量信息中提取价值。通过学习本文,你将能够实现一个基本的爬虫,利用推荐算法为用户定制新闻流,并了解如何部署和维护这样一个系统。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将成为你技术成长路径上的一块垫脚石。
|
6月前
|
数据采集 存储 JSON
用Scrapy精准爬取BOSS直聘特定行业职位
用Scrapy精准爬取BOSS直聘特定行业职位
|
9月前
|
监控 安全 网络安全
WPA2 与 802.1X:有什么区别?
【10月更文挑战第17天】
594 1
WPA2 与 802.1X:有什么区别?
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
AI:塑造未来的技术力量
人工智能(AI)正迅猛变革世界,触及生活与产业各层面。AI通过计算机程序模拟人类智能,涵盖机器学习、自然语言处理等技术。其在医疗健康、自动驾驶、金融科技、智能家居领域的应用日益广泛,既促进经济转型,又引发就业、伦理及隐私等问题。未来,AI不仅是工具,更是人类的协作伙伴,但同时也需建立相应的伦理法律框架,确保技术发展惠及所有人。
|
11月前
|
C++
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
311 0
|
小程序 JavaScript 前端开发
【经验分享】如何实现在支付宝小程序内的图片裁剪功能
【经验分享】如何实现在支付宝小程序内的图片裁剪功能
356 2
|
SQL 安全 关系型数据库
BUUCTF:Web 解析(一)
BUUCTF:Web 解析(一)