Service的两种启动方式

2023-10-30

在Android开发的过程中,Service是一个非常重要的组件。
它的生命周期里面有几个特别重要的方法。

  1. Service的生命周期

onCreate 当服务创建的时候调用
onStartCommand startServcie的时候会调用这个方法
onBind 当有其他组件想通过bindService()方法绑定这个服务时系统就会调用此方法。在实现的方法里面,必须添加一个供客户端使用的接口通过返回IBinder来与服务通信,这个方法必须实现。当然想禁止绑定的话,返回null即可。
onDestory()
服务不再使用则调用该方法。服务应该事先这个方法来清理诸如线程,注册的监听器等资源。这是最后调用的方法。

  1. 服务启动的两种方式

启动Service有两种方式:1.startService 2.bindService
这两种启动方式,一种是需要跟生命周期绑定,
如果同时以两种方式来启动service,会走service生命周期的哪些方法?
1.startservice启动后,service会一直在后台运行,直到主动调用stopservice函数。
2.bindservice启动后,service在绑定的activity摧毁以后会自动停止。
这里写图片描述

  1. 如果以两种方式启动同一个服务会怎样?

我们用实际例子验证下,首先新建一个Activity,上面放置四个按钮,分别对应startservice,bindservice,unbindservice,stopservice四个函数。具体代码如下:

 @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button:
                     Intent intent  = new Intent(v.getContext(),MyService.class);
                     startService(intent);
                break;
            case R.id.button2:
                    Intent intent2 = new Intent(v.getContext(), MyService.class);
                    bindService(intent2, conn, Context.BIND_AUTO_CREATE);
                break;
            case R.id.button3:
                unbindService(conn);
                break;
            case R.id.button4:
                Intent intent3  = new Intent(v.getContext(),MyService.class  );
                stopService(intent3);
              break;


        }
    }

首先,我们点击startservice
这里写图片描述
再点击onbind的时候,执行onbind方法。
这时候我们就算再次绑定服务,还是只会执行一次onbind方法。
好了,现在这个服务不想要了。
我们点击 unbindservice取消绑定服务。这时候只执行了onUnbind函数。但是没有执行onDestory。说明服务还没有销毁掉。
这时候我们点击StopService。日志上显示onDestroy。说明这时候服务才被销毁。
总结:当开启一个服务后,然后绑定一个服务后,就算取消绑定了,那个服务也还会在,直到我们调用了stopservice。
再来。
先点击绑定服务。这时候日志上显示

 31898/service.example.com.servicedemo D/TAG: OnCreate
 31898/service.example.com.servicedemo D/TAG: onBin
d

这次我们先执行的是bindService,然后执行startService
这里写图片描述
这时候日志里面执行了onstartcommand onstat
t
然后如果想关掉这个服务我执行stopservice,然后没看见打印任何东西,这时候我执行unbindservice,然后输出onunbind ondestryy
y
通过以上的实验证明,一个服务如果如果通过两种不同的启动方法,那么在它还有绑定的activity的时候,就算执行了stopservice,它也不会被关闭。 相对的,一个通过startservice启动的服务,然后绑定了服务的同时i,就算执行了unbindservice,它也还未被关闭,只有执行了stopservice后才能销毁。这就是用两种方式启动service后,service的生命周期。
附上我的代码地址:
https://github.com/preqel/ServiceDemo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Service的两种启动方式 的相关文章

  • 配置宝塔,搭建网站

    配置宝塔面板 一 获取虚拟机的IP地址 打开虚拟机 输入命令 ip addr获取IP地址 二 使用cmd运行获取宝塔面板信息 1 运行cmd 并输入命令ssh root 获取的IP地址 2 输入登录密码 3 获取宝塔的命令行 4 输入14命
  • 跨专业计算机研究生如何毕业论文,跨专业考研论文要求

    跨专业考研写几篇论文 跨专业考研论文要求 近几年 跨专业考研得的队伍愈发壮大 许多考生不仅会跨相关专业 甚至还有人进行文理科间得的 大转行 跨专业报考得的难度系数在考研中是比较大得的 既有 满盘皆输 得的危险 也可能会带来出奇制胜得的效果
  • Column ‘status_type‘ in where clause is ambiguous

    多表查询时 由于字段名字有重复 所以需要指定那张表的字段
  • 学习笔记《你不知道的JavaScript上卷》第一章 作用域是什么 1.2理解作用域

    引擎 从头到尾负责整个 JavaScript 程序的编译及执行过程 编译器 引擎的好朋友之一 负责语法分析及代码生成等脏活累活 详见前一节的内容 作用域 引擎的另一位好朋友 负责收集并维护由所有声明的标识符 变量 组成的一系列查 询 并实施
  • 小程序开发工具全新上线

    导语 为了让开发者更高效地开发和发布小程序 微信开发者工具全新改版上线 并新增测试系统 腾讯云工具 运维性能监控 小程序分阶段发布 WXS脚本语言等 01 微信开发者工具 为提升小程序开发体验 帮助开发者更高效地开发小程序代码 微信开发者工
  • JDBC自定义框架

    自定义JDBC框架 定义必要的信息 获取数据库的连接 释放资源都是重复的代码 在操作JDBC时通常都是执行SQL语句就可以了 所以需要抽取出来一个模板类来封装一些方法 Update Query 专门执行增删改查的SQL语句 简化使用步骤 D
  • 字符串转LocalDateTime异常

    文章目录 现象 解决方案 拓展测试 总结 现象 当使用LocalDateTime 与字符串互转异常 使用LocalDateTime 字符串必须带时分秒 public static void main String args DateTime
  • vcruntime140.dll重新安装的方法(最佳推荐方法)

    vcruntime140 dll是什么什么文件呢 为什么电脑在运行一些游戏的时候会出现丢失vcruntime140 dll 然后游戏运行失败 这个dll文件是电脑重要的运行库文件 丢失了会导致很多程序无法运行 下面将介绍vcruntime1
  • 在vue项目中使用高德地图

    1 安装高德地图插件 npm install vue amap save 2 申请高德地图账号和key 官网地址 高德开放平台 高德地图API 3 在main js中引入 引入vue amap import VueAMap from vue
  • 三维包围盒碰撞检测算法-Python(OBB-SAT)

    想实现一个检测三维包围盒是否发生碰撞的功能 因为目标是任意方向的三维包围盒 即没有和坐标轴对齐的旋转包围盒 所以考虑采用检测OBB碰撞的SAT算法 但找了很久没找到现成的python代码 就比着别人写的C 版本自己写了python的代码 1
  • CAT3、CAT4、CAT5、CAT5E、CAT6、CAT6A、CAT7和CAT8网线的介绍

    目录 1 CAT3网线 10Mbps 2 CAT4网线已淘汰 3 CAT5 网线 100MHz 100Mbps 4 CAT5E网线 100MHz 1000Mbps 5 CAT6网线 250MHz 1000Mbps 6 CAT6A 网线 50
  • C#程序中进行FTP上传下载时出现的问题

    在C 程序中 进行ftp操作时容易出现的问题 The remote server returned an error 550 File unavailable e g file not found no access 解决方法 首先 查看登
  • matlab中的twomodegauss函数-双峰高斯函数

    文章搬运于 http blog sina com cn s blog 4fc818ea0101l8kn html function p twomodegauss m1 sig1 m2 sig2 A1 A2 k TWOMODEGAUSS Ge
  • STM32在FREEOS进行IAP跳转死机

    现象 STM32使用串口IAP进行跳转 发现APP程序用freeos编写的时候 程序跳转完成后就死机了 IAP程序在跳转前都关闭了中断和复位了使用的外设 已经验证跳转到裸机程序没有问题 FREEOS的程序在main函数开始就进行了开启中断和
  • wireshark取证案例学习笔记

    此文对应wireshark取证分析练习题前5道 题目来源 及PACP包下载地址 自己学习的一点笔记和心得 记录下来以免遗忘 练习题1的任务书解答 某公司怀疑其雇员张小花是其竞争对手派来的商业间谍 张小花访问了公司的一个机密配方 安保人员担心
  • Windows删除本地svn项目文件夹

    在window下 打开DOS命令窗口 进入需要清除svn的文件目录 输入如下命令 for r a in do if exist a svn rd s q a svn
  • ecs云服务器网站迁移,ecs云服务器网站迁移

    ecs云服务器网站迁移 内容精选 换一换 备案是中国大陆的一项法规 使用大陆节点服务器提供互联网信息服务的用户 需要在服务器提供商处提交备案申请 根据工信部 互联网信息服务管理办法 国务院292号令 和工信部令第33号 非经营性互联网信息服
  • GNU协议条款

    感谢原文作者 http v266 yo2 cn articles gnu E7 99 BE E7 A7 91 E5 90 8D E8 AF 8D E8 A7 A3 E9 87 8A html GNU 包含3个协议条款 GPL GNU通用公共

随机推荐