service---七月十九号实验

1 startService、bindService

  1. startService:即使用户不直接与应用程序交互做的事情。这对应于Context.startService()系统安排服务工作的调用 ,直到服务或其他人明确停止它为止。,

  2. bindService:Context.bindService(),它允许与服务建立长期连接以便与服务进行交互。

2 分析生命周期变化

生命周期:

上图中onStart()方法已经弃用;

流程:onCreat—》onStartCommand--》onBind--》onUnbind--》onDestroy

系统可以运行服务有两个原因。

  1. 如果有人调用,Context.startService()那么系统将启动服务(创建它并onCreate()在需要时调用其方法),然后onStartCommand(Intent, int, int)使用客户端提供的参数调用其方法。此服务将在此时继续运行,直到Context.stopService()或被 stopSelf()调用。请注意,对Context.startService()的多次调用不会嵌套(尽管它们会导致多次对onStartCommand()的相应调用),因此无论启动多少次,一旦Context.stopService()或stopSelf停止服务 ; 服务可以使用它们的stopSelf(int)方法来确保在处理启动的意图之前不停止服务。

  2. 对于已启动的服务,他们可以决定运行两种主要的操作模式,具体取决于它们从onStartCommand()返回的值:START_STICKY用于根据需要显式启动和停止的服务,同时START_NOT_STICKYSTART_REDELIVER_INTENT用于服务应该只在处理发送给它们的任何命令时保持运行。。

客户端还可以Context.bindService()用于获取与服务的持久连接。如果服务尚未运行(onCreate()在执行此操作时调用),这同样会创建服务,但不会调用onStartCommand()。客户端将接收IBinder服务从其onBind(Intent)方法返回的 对象 ,允许客户端然后回调该服务。只要建立连接,服务将保持运行(客户端是否保留对服务的IBinder的引用)。通常,IBinder返回的是一个用aidl编写的复杂接口。

通过Demo类继承Service , 实现关于生命周期的方法,新建Activity来调用Service的方法:

  1.  @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. 官网:https://developer.android.com/reference/android/app/Service.html?hl=en#ProcessLifecycle

问题思考:

1. onBind方法返回值为IBinder,starService返回为ComponentName:

2. onStart()方法已经弃用;使用:ComponentName startService(Intent service)

3.使用: 继承Binder,建立对象, onBind方法返回IBind对象,传入OnServiceConnection方法。

service---七月十九号实验的更多相关文章

  1. SQL注入之Sqli-labs系列第二十九关(基于WAF防护的单引号报错注入)

    开始挑战第二十九关(Protection with WAF) 0x1查看源码 (1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注) 0x2 for ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十九:SDRAM模块② — 多字读写

    实验十九:SDRAM模块② — 多字读写 表示19.1 Mode Register的内容. Mode Register A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A ...

  3. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  4. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  5. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  6. Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

    前言 之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式:虽然注解方式干掉了 xml 文件,但是使用起来并不 ...

  7. NeHe OpenGL教程 第十九课:粒子系统

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)

      设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...

  9. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

随机推荐

  1. 第一个java小程序

    程序名:MyFirstJavaProgram.java //package com.example; public class MyFirstJavaProgram { public static v ...

  2. 【K短路】牛慢跑

    牛慢跑 据说是\(k\)短路模板,要用\(A^*\),然而我不会.我是用拓扑排序加堆优化广搜水过去的.第一道完全靠自己做出来的紫题,调了两个小时,交了两遍.果然我还是太菜了. 正解的话,可以看红太阳的 ...

  3. 【LGR-060】洛谷10月月赛 I

    A - 打字练习 出题:memset0 送分模拟题,按题意模拟即可. 需要注意的是对退格键的判断,如果光标已经在行首,则直接忽略被读入的退格键. B - 小猪佩奇爬树 出题:_QAQ 维护所有相同节点 ...

  4. Linux性能优化实战学习笔记:第二十七讲

    一.案例环境描述 1.环境准备 2CPU,4GB内存 预先安装docker sysstat工具 2.温馨提示 案例中 Python 应用的核心逻辑比较简单,你可能一眼就能看出问题,但实际生产环境中的源 ...

  5. [LeetCode] 893. Groups of Special-Equivalent Strings 特殊字符串的群组

    You are given an array A of strings. Two strings S and T are special-equivalent if after any number ...

  6. [LeetCode] 32. Longest Valid Parentheses 最长有效括号

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  7. 使用maven-resources-plugin插件分环境配置

    一.项目目录结构    二.pom文件中引入maven-resources-plugin插件和相关的标签 <build> <plugins> <plugin> &l ...

  8. Ansible16:Playbook高级用法

    目录 本地执行 任务委托 任务暂停 滚动执行 只执行一次 设置环境变量 交互式提示 本地执行 如果希望在控制主机本地运行一个特定的任务,可以使用local_action语句. 假设我们需要配置的远程主 ...

  9. MongoDB 学习笔记 ---创建用户

    MongoDB安装好了之后,开始学习常用命令 首先,运行MongoDB, 记住,先不用带参数--auth /usr/local/mongodb/bin/mongod -dbpath=/usr/loca ...

  10. 【01】Saltstack:从零开始 Saltstack

    写在前面的话 最近一直都在整理以前的乱七八糟的笔记,所以会有很多老旧的东西都会被拉出来重新遛遛.算是再度系统的进行学习. 关于 Saltstack 的一些概念 Saltstack 是基于 Python ...