service---七月十九号实验
service---七月十九号实验
1 startService、bindService
startService:即使用户不直接与应用程序交互做的事情。这对应于
Context.startService()
系统安排服务工作的调用 ,直到服务或其他人明确停止它为止。,bindService:
Context.bindService()
,它允许与服务建立长期连接以便与服务进行交互。
2 分析生命周期变化
生命周期:
上图中onStart()方法已经弃用;
流程:onCreat—》onStartCommand--》onBind--》onUnbind--》onDestroy
系统可以运行服务有两个原因。
如果有人调用,
Context.startService()
那么系统将启动服务(创建它并onCreate()
在需要时调用其方法),然后onStartCommand(Intent, int, int)
使用客户端提供的参数调用其方法。此服务将在此时继续运行,直到Context.stopService()
或被stopSelf()
调用。请注意,对Context.startService()的多次调用不会嵌套(尽管它们会导致多次对onStartCommand()的相应调用),因此无论启动多少次,一旦Context.stopService()或stopSelf停止服务 ; 服务可以使用它们的stopSelf(int)
方法来确保在处理启动的意图之前不停止服务。对于已启动的服务,他们可以决定运行两种主要的操作模式,具体取决于它们从onStartCommand()返回的值:
START_STICKY
用于根据需要显式启动和停止的服务,同时START_NOT_STICKY
或START_REDELIVER_INTENT
用于服务应该只在处理发送给它们的任何命令时保持运行。。
客户端还可以Context.bindService()
用于获取与服务的持久连接。如果服务尚未运行(onCreate()
在执行此操作时调用),这同样会创建服务,但不会调用onStartCommand()。客户端将接收IBinder
服务从其onBind(Intent)
方法返回的 对象 ,允许客户端然后回调该服务。只要建立连接,服务将保持运行(客户端是否保留对服务的IBinder的引用)。通常,IBinder返回的是一个用aidl编写的复杂接口。
通过Demo类继承Service , 实现关于生命周期的方法,新建Activity来调用Service的方法:
@Override
public void onCreate() {
Log.d("Service声明周期", "onCreate: ");
super.onCreate();
} @Override
public ComponentName startService(Intent service) {
Log.d("Service声明周期", "startService: ");
return super.startService(service);
} @Override
public IBinder onBind(Intent intent) {
Log.d("Service声明周期", "onBind: ");
return null;
}
@Override
public void onRebind(Intent intent) {
Log.d("Service声明周期", "onRebind: ");
super.onRebind(intent);
} @Override
public void onDestroy() {
Log.d("Service声明周期 ","onDestroy: ");
super.onDestroy();
}
启动验证周期:
相关链接:
问题思考:
1. onBind方法返回值为IBinder,starService返回为ComponentName:
2. onStart()方法已经弃用;使用:ComponentName startService(Intent service)
3.使用: 继承Binder,建立对象, onBind方法返回IBind对象,传入OnServiceConnection方法。
service---七月十九号实验的更多相关文章
- SQL注入之Sqli-labs系列第二十九关(基于WAF防护的单引号报错注入)
开始挑战第二十九关(Protection with WAF) 0x1查看源码 (1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注) 0x2 for ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十九:SDRAM模块② — 多字读写
实验十九:SDRAM模块② — 多字读写 表示19.1 Mode Register的内容. Mode Register A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A ...
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- 学习笔记:CentOS7学习之十九:Linux网络管理技术
目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...
- Spring Boot 2.X(十九):集成 mybatis-plus 高效开发
前言 之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式:虽然注解方式干掉了 xml 文件,但是使用起来并不 ...
- NeHe OpenGL教程 第十九课:粒子系统
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...
随机推荐
- 【视频技术】EasyDarwin
- Python进阶-Ⅸ 递归 二分法
1.算法 英文名:algorithm,就是计算的方法.# 是截止到目前,人类发现的针对特定场景的,最优的计算方法.是人类智慧的结晶.# 人脑是复杂的,电脑其实很简单.比如: 999 * 123 人类会 ...
- n8n 基于node 的流程自动化工具
n8n 是基于node开发的流程自动化工具,提供了可视化的操作,我们可以用来集成不同的服务. 目前已经提供了很多的服务集成组件,同时我们也可以方便的自己扩展,后边会进行一个系统的 学习,同时介绍下使用 ...
- quartz Cron表达式生成详解
简介 Cron作为一个Unix工具,已经存在很长一段时间了,用于实现任务调度的功能.CronTrigger类基于Cron而来. CronTrigger CronTriggers往往比SimpleTri ...
- .NET Core:过滤器
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码.功能上更贴合业务的使用过滤器. 在Startup中的ConfigureServices方 ...
- vs2019 更新之后无法用ctrl+d再设置回来..
工具-选项-环境-键盘
- OPTIONS预检请求
OPTIONS预检请求 背景:像后台发送一个post请求,出错,错误代码403(权限验证未通过),查看请求方法变成OPTIONS.检查请求头得知,当前请求token未带上,问题,为什么post请求变成 ...
- Linux : Ubuntu 安装 RabbitMQ
安装 Erlang: 手动编译(不推荐)http://www.erlang.org/downloads下载源码 如22版本:http://erlang.org/download/otp_src_22. ...
- Django学习——全局templates引用的问题
一.问题在构建网站的时候我们会用到全局的templates处理错误的网页,此时我们需要对urls进行一个映射,使得在使用的时候避免重复调用.在使用的时候还会产生错误代码:第一个是404界面的,第二个是 ...
- 【01】Python:故事从这里开始
写在前面的话 最近在 Github 上面看到一个 100 天学习 Python 项目: https://github.com/jackfrued/Python-100-Days 于是便想着抽时间将自己 ...