Service自动被销毁?
1 简介
Service的几种应用场景中,你是否考虑过Service是否真正被销毁了?本篇将针对各种场景下,Service如何被自动销毁以及重建做个简单的介绍。
2 使用场景
2.1 同一应用内使用Service
- 使用startService启动服务
1.直接关闭应用,用户通过back键返回关闭应用时,应用可能并没有真正意义的退出,当点击任务栏快捷键查看时该应用可能还存在,这种情况下应用并没有完全退出,所以Service没有被销毁。
2.直接关闭应用,应用确实被杀死了。通过任务栏,查看应用列表,已无该应用。这种情况下需要参考onStartCommand的返回参数,来判断Servcie的状态。
onStartComand使用时,返回的是一个(int)整形。
这个整形可以有四个返回值:START_STICKY、START_NO_STUCKY、START_REDELIVER_INTENT、START_STICKY_COMPATIBILITY
。
它们的含义分别是:
1):START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
2):START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务
3):START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
4):START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
- 使用bindService绑定服务
应用退出以后,service会自动被销毁。 - 使用startServcie启动服务,然后使用bindService绑定服务
应用退出后,如果onStartCommand返回的是粘性服务,Service会被重建,且onStartCommand会被执行,即Service会正常运行;如果返回非粘性服务,Servcie会被重建,但是onStartCommand并不会被执行,即Service被重建,但是并没有在运行状态。 - 使用bindService绑定服务,然后使用startService启动服务
该种场景与第三种场景一样。
2.2 不同应用之间使用Service
- 使用startService启动服务
关闭服务所在应用的情况可以参考同一应用中的情况;关闭启动服务的进程,对service无影响,故不会销毁服务。 - 使用bindService绑定服务
需要多个客户端都与service断开连接才会销毁服务。 - 使用startServcie启动服务,然后使用bindService绑定服务
1)关闭服务所在应用的情况:
如果onStartComand,返回的是粘性服务,客户端退出以后,服务会被重建且onBind,conStartCommand会被重新执行;如果返回的是非粘性服务,服务会被重建,onBind方法会重新执行。
2)关闭启动服务者的进程:
如果使用startService启动的,服务不会被销毁;
如果使用bindService绑定服务的,多个客户端如果全部退出,服务会被解绑;否则,对服务没有影响。 - 使用bindService绑定服务,然后使用startService启动服务
可以参考第三种场景。
Service自动被销毁?相关推荐
- android service什么时候销毁,阳光沙滩-android 通过AppWidgetProvider 启动的Service会自动销毁问题...
想写一个根据电量来切换图片的AppWidget,由于监视电量需要另起一个service,我的想法是在添加第一个widget时启动service,在删除最后一个时结束service. layout< ...
- 安卓手机后台Service自动转发短信
笔者是在学校用电信宽带的,有好基友向我要电信wifi Chinanet的密码用用,自己偷空写了一个安卓程序,用来自动判断接受到的短信: MainActivity.java package com.yi ...
- Web Service 自动生成代码报错
案例 1 生成时报错:WSDL file has validation errors. Code generation may fail 启动报错: Caused by: javax.xml.ws.W ...
- Android 面试 - 有关Service的面试题
1.Service是什么 Service(服务)是一个可以在后台执行长时间运行操作而没有用户界面的应用组件. 注:Service是运行在主线程中的,不能进行耗时操作 2.Service和Thread的 ...
- Android性能优化 笔记
说明 这篇文章是将很久以来看过的文章,包括自己写的一些测试代码的总结.属于笔记的性质,没有面面俱到,一些自己相对熟悉的点可能会略过. 最开始看到的性能优化的文章,就是胡凯的优化典范系列,后来又陆续看过 ...
- service实现自动更换壁纸
在activity中用以下代码使用 Intent intent = new Intent(MyActivity.this, ChangeService.class); startService(int ...
- android四大组件 服务,Android四大组件之Service
Service Service(服务)是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到 ...
- 关于Android Service真正的完全详解,你需要知道的一切
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52709857 出自[zejian的博客] Service全部 ...
- Android中的service
简介 : 创建一个服务 class TestService extends Service {@Overridepublic void onCreate() {super.onCreate();}@O ...
- android demo示例代码,Android Service demo例子使用详解(示例代码)
Android Service demo例子使用详解\ 概述 Service 是 Android 的四大组件之一,它主要的作用是后台执行操作,Activity 属于带有 UI 界面跟用户进行交互,而 ...
最新文章
- mysql 5.7 xbackup_CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
- 数组专题——找重复数字 利用下标
- docker nginx安装模块_docker安装nginx与php7.1
- java——maven依赖版本冲突
- javaScript初学笔记(二)
- 平行驾驶与平行交通:从智能出行到智慧城市
- Android平台屏幕/摄像头或外部数据采集及RTMP推送接口设计描述
- 1.3MB 的超轻YOLO算法!全平台通用,准确率接近YOLOv3,速度快上45%丨开源
- 【英语学习】【WOTD】doldrums 释义/词源/示例
- angular select2源码解析_Angular 组件库 NG-NEST 源码解析:Form 表单组件
- php无限级回复页面如何嵌套,php无限级评论嵌套实现代码
- mysql 无法连接 native_php无法连接mysql8 mysql_native_password
- SEO怎么做?从排名和关键字优化入手
- 挖掘有多深,舞弊就有多大,孙德顺敛财10亿,看图计算如何穿透与识别多层嵌套影子公司!...
- [VB.NET]雪花飘的屏保
- 牛客练习赛63 B	牛牛的鱼缸
- GitHub 装逼指南
- 多伦多ajax小镇,加拿大人口普查数据公布:多伦多都市区人口600万
- 决策树6:分类与回归树CART
- 全部实行“申请―考核”制!北京师范大学博士招生明确规定!