Service入门

news2025/4/6 0:50:33

Service入门

1.什么是Service

1.1手机中的Service案例

1.2为什么会有service?

由于手机的原因一个时刻只允许一个激活状态的Activity,其余的处于未激活

后台服务机制应运而生

1.3Service简介

  • 四大组件之一
  • 没有UI界面,后台服务,长时间运行
  • 与Activity是并列关系,都是Context子类
  • 可以交互
  • 不需要用户干预

1.4功能

  • 实现进程之间的通信工作

2.Service和Activity比较

2.1比较

Service

Activity

可执行程序

同上

有生命周期

同上

Context派生

同上

后台运行

反之

无UI界面

反之

不可以主动运行

反之

2.2选择标准

  • 呈现界面需要交互最好是Activity
  • 不需要界面考虑Service

2.3Service的应用常见

  • 下载任务
  • 音乐播放器
  • 网络连接服务
  • 定时触发任务

3.创建、注册、启动、停止

3.1创建

1.继承Service类

2.Service的生命周期方法以及介绍

public class MyService1 extends Service {

    /*
    *
    * 创建的时候被调用一次,调用完成之后会销毁
    * */
    @Override
    public void onCreate() {
        super.onCreate();
    }

    /*
    * 采用startService启动服务的时候调用
    * Intent是从客户端传来的数据
    * flags是附加数据,表示启动的方式
    *startId表示当前服务的唯一的ID的值
    * */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Nullable
    @Override
    /*
    * 采用bind的方式启动的时候会被调用
    * 返回值是一个IBinder的接口实现类对象(需要自己去定义)
    * */
    public IBinder onBind(Intent intent) {
        return null;
    }

    /*
    *
    * 客户端调用unBindService的时候调用,断开改Service上连接的所有客户端
    * */
    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    /*
    * 当Service被关闭/销毁的时候调用
    * */

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

3.补充

3.2注册

1.服务创建完成后,要在AndroidManifest.xml文件中注册该Service,否则服务是不生效的。

3.3启动

1.启动方式:2种

  • startService,不可以回传数据,无交互
  • bindService,可以回传数据,传参、方法调用可以交互

不管怎样Service都是不能自己启动的需要帮忙启动。

2.启动方式比较

  • 实际的开发都是bind

Start方式

Bind方式

用startService()来启动

用bindService()绑定启动

客户端与Service之间没有关联,即使客户端退出了,Service仍然运行,直到自身调用stopSelf()方法或者其他组件调用stopService()方法时服务停止,最终被系统销毁。

客户端与Service绑定在一起,所有的客户端退出,Service也就停止,但是只要有一个客户端存在,那么Service继续运行。其它组件通过Context.unbindService()停止服务。

客户端和Service之间无法通信法进行数据交互

客户端和Service之间可以通信,可以进行数据交互

3.4start启动方式

1.显式

  • 和Activity是类似的
  intent=new Intent(this,MyService1.class);
        startService(intent);

2.隐式启动

  • 必须设置setPackage不然的话会失败
 intent=new Intent();
        //需要设置app的包名否则无效
        intent.setPackage("com.lxz.app9");
        intent.setAction("com.lxz.app9Service");
        startService(intent);

intent.setPackage("com.android.vending")

注意是程序的包名就是Activity所在的包。

3.5bind方式启动

1.启动过程

  • 不同在启动的过程
  • 多一个创建conn连接对象的过程
  • conn可以也是进行数据回传的接口

2.Service的bind启动

如果我们解除与服务的绑定,只需调用unbindService(),此时onUnbind和onDestory方法将会被调用!这是一个客户端的情况,假如是多个客户端绑定同一个Service的话, 当一个客户端完成和service之间的互动后,它调用 unbindService() 方法来解除绑定。当所有的客户端都和service解除绑定后,系统会销毁service。

当首次使用bindService绑定一个Service时,系统会实例化一个Service实例,并调用其onCreate()和onBind()方法,然后调用者就可以通过IBinder和Service进行交互了,此后如果再次使用bindService绑定Service,系统不会创建新的Sevice实例,也不会再调用onBind()方法,只会直接把IBinder对象传递给其他后来增加的客户端!

3.bindService方法

Context中的绑定方法:

bindService (Intent service,ServiceConnection conn,int flags)

参数说明:

  • service:该Intent对象用于指定要启动的service
  • conn:该参数是一个serviceConnection对象,用于监听客户端与service之间的连接情况,当调用者与Service连接成功时将回调serviceConnection接口实现类对象conn的onServiceConnected(ComponentName name,IBinder service)方法,如果意外断开将回调onServiceDisConnected(ComponentName name)方法
  • flags:指定绑定时是否自动创建service,可指定为0(不自动创建)或BIND_AUTO_CREATE(自动创建)。

3.6混合启动方式

1.启动方式和绑定方式的结合

这两种使用方法并不是完全独立的,在某些情况下可以混合使用

以MP3播放器为例,在后台工作的Service通过Context.startService()启动某个特定音乐播放

但在播放过程中如果用户需要暂停音乐播放,则需要通过Context.bindService()获取服务链接和Service对象

进而通过调用Service的对象中的函数,暂停音乐播放过程,并保存相关信息

在这种情况下,如果调用Context.stopService()并不能够停止Service,需要在所有的服务链接关闭后,Service才能够真正的停止

4.生命周期

4.1start启动方式的生命周期

4.2bind方式启动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Word处理控件Aspose.Words功能演示:在 Python 中将 Markdown 转换为 PDF

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

人物百度百科创建:建立人物百度百科都需要什么资料?

人物百度百科词条就像一张网络名片,词条上面的内容是非常具有权威性和公信力的。创建一个百度百科词条,可以帮助你很好地打造个人ip,尤其是在当今互联网时代,ip的打造对于个人的重要性是不言而喻的。 如果你想要提升自己的知名度…

2023年全国管理类联考综合试卷真题及解析

1.油价上涨5%后,加一箱油比原来多花20元,一个月后油价下降了4%,则加一箱油需要花( )钱 A.384元 B.401元 C.402.8元 D.403.2元 E.404元 2.已知甲、乙两公司的利润之比为3:4,甲、丙两公司的利润之比为1&am…

二硬脂酰磷脂酰乙醇胺-聚乙二醇-巯基吡啶 DSPE-PEG-OPSS;常用于脂质体的合成

DSPE-PEG-OPSS 、OPSS-PEG-DSPE 巯基吡啶聚乙二醇磷脂、磷脂聚乙二醇巯基吡啶 中文名称 :磷脂聚乙二醇巯基吡啶、巯基吡啶聚乙二醇磷脂 简称 :OPSS O-PEG-DSPE、DSPE-PEG-OPSS 外观 :白色液体、半固体或固体,取决于分子量。 …

Spring之底层架构核心概念-Environment

文章目录1.Environment作用2.用法2.1 systemEnvironment 和 systemProperties2.2 MutablePropertySources3.实际用法4.总结1.Environment作用 Environment:获取环境变量 2.用法 2.1 systemEnvironment 和 systemProperties public static void main(String[] ar…

【UE4 第一人称射击游戏】13-瞄准开火

上一篇: 【UE4 第一人称射击游戏】12-全自动步枪并显示剩余弹药量 本篇效果: 步骤: 1.打开“ThirdPersonCharacter”,添加一个骨架网格体组件 将其作为Mesh(继承)的子级 父项套接字选为“Weapon_Attach”…

2022需求最大的 8 种编程语言:Python第二,ta居榜首

一直以来,编程语言都是程序员非常关注的话题。虽然有超过200编程语言,但其中只有少数用于现实世界的行业。 2022年也快接近尾声,今年最受欢迎使用最多的语言有哪些呢? 从2021年10月到2022年11月,DevJobsScanner分析了…

国内葡萄酒行业数据浅析

大家好,这里是小安说网控。 葡萄酒是最为常见的果酒,在国内酒品市场上占据着一席之地。近年来,受整体经济环境影响,葡萄酒行业的各项数据都不甚理想。 今年,1-10月份,国内葡萄酒产值,无论是当期…

[ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

skywalking 快速入门

一、skywalking简介 1、skywalking介绍 Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项…

村政府小型网站

小型网站架构 编程工具,编程语言,编程细节 编程工具 idea最好的java项目编程工具,集合springboot框架。 编程语言 java,jsp,数据库表编程 编程细节 配置springboot,pom.xml相关配置文件,熟练使用idea以及相关目…

再学C语言15:其他运算符

C大约有40个运算符 一、sizeof运算符和size_t运算符 sizeof运算符:以字节为单位返回其操作数大小;操作数可以是一个具体的数据对象(如一个变量名)或者一个类型(如float);如果数据对象是一个类…

unity前端通过java后端实现将图片上传到阿里云OSS并在前端显示

一、开通对象存储OSS服务 阿里云-搜索推荐 (1)申请阿里云账号 (2)实名认证 (3)开通对象存储oss服务 (4)进入管理控制台 (5)创建bucket (6&a…

基于注解的自动装配之@Autowired的原理及注意事项

基于注解的自动装配之Autowired的原理及注意事项 1. Autowired的原理 首先根据所需要的组件类型到IOC容器中查找 能够找到唯一的bean:直接执行装配 如果完全找不到匹配这个类型的bean:装配失败 和所需类型匹配的bean不止一个 没有Qualifier注解&#…

YGG 与 Mike Ovecka 对 Web3 电子竞技的愿景

(从左到右)YGG 内容创作者 Een Mercado、Ampverse Web3 负责人 Sascha Jochum、Axie Infinity 菲律宾负责人 Nix Eniego、MetaSports 联合创始人兼 CEO Joe Josue 和 YGG 电子竞技负责人 Mike Ovecka 在 Philippine Web3 Festival 的“区块链游戏电子竞…

MybatisPlus代码生成器配置(处理blob等类型)

一&#xff1a;新建springboot项目 二&#xff1a;导包 <dependencies><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.2</version></dependency><depe…

ATJ2158界面绘制LVGL---定时器

LVGL定时器 在lv_timer.c中有相关的操作函数 Create a timer&#xff08;创建定时器&#xff09; LVGL 有一个内置的定时器系统。可以注册一个函数以定期调用它。定时器在lv_timer_handler()中被处理和调用&#xff0c;它需要每隔几毫秒调用一次 Ready and Reset&#xff0…

fio磁盘压测工具

文章目录背景安装测试如何模拟现实中的IOfio参数解释【1】随机读测试【2】随机写测试【3】 顺序读测试【4】 顺序写测试numjobs5 测试随机读随机写顺序读顺序写blktracefio 模拟真实IO场景查看 blktrace 记录的结果将结果转化为二进制文件使用 fio 重放日志结论背景 因为是虚拟…

Oracle 备份与恢复常见的七大问题

为了最大限度保障数据的安全性&#xff0c;同时能在不可预计灾难的情况下保证数据的快速恢复&#xff0c;需要根据数据的类型和重要程度制定相应的备份和恢复方案。在这个过程中&#xff0c;DBA的职责就是要保证数据库&#xff08;其它数据由其它岗位负责&#xff09;的高可用和…

Linux常用操作(下)

目录 文件传输 全局查找 管道符 统计数目 vim快捷键 软件安装 用户和组 文件权限 文件传输 yum install lrzsz -y rpm -qa |grep lrzsz 完成后直接将文件拖入xshell即可 全局查找 grep 字符串 文件名 grep colea * grep -r colea *//递归全局查找 管道符 ps -ef…