第十四单元:Service生命周期和启动方式

Service的相关知识总结 阅读详情

Service生命周期和启动方式

  • Service介绍
  • Service特点
  • 如何创建Service
  • Service的启动方式以及生命周期
    启动方式一 (startService)
    启动方式二 (bindService)

Service介绍

1.Service,服务,是四大组件之一, 和Activity 非常相似, 一般运行在后台, 没有用户界面, 可执行的程序
2.Activity 和 Service的区别
(1)不同点:
Activity : 可以和用户交互, 页面可见
Service : 后台运行, 没有界面
(2)相同点:
在清单文件中注册, 都有自己的生命周期

Service特点

service在后台运行,不用与用户进行交互。即使应用退出,服务也不会停止。
当应用进程被杀死时,服务便会停止.
service运行在主线程中,当需要执行耗时操作的时候,需要在服务中创建子线程完成
service 的用途:播放音乐;后台下载大文件等

如何创建Service

1, 定义一个类, 继承Service
2, 重写父类的方法, onBind() — 必须重写的方法
3, 在清单文件中, 注册Service

Service的启动方式以及生命周期

启动方式一 (startService)

1,右键创建一个Service

public class MyService extends Service {
    private static final String TAG = "嘿嘿嘿";

    public MyService() {
        Log.i(TAG, "MyService: hellow");
                
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

布局文件
两个按钮,一个启动,一个停止

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button1"
        android:text="启动一个服务" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:text="停止一个服务" />
</LinearLayout>

java 代码文件

public class MainActivity extends AppCompatActivity {
    private Button button1;
    private Button button2;
    private Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(intent);
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent = new Intent(MainActivity.this, MyService.class);
                startService(intent);
            }
        });

    }
}

完善方法,验证生命周期 如果服务已经开启,就不会重复的执行 onCreate() ,而是调用 onStart() 或
onStartCommand()。而服务停止的时候调用 onDestory()

一旦服务开启跟开启者就没有任何关系; 开启者退出之后,服务还是可以在后台长期运行的。前提是没有调用 stopService(Intent);
开启者不能调用服务里面的方法

启动方式:onCreate() — onStartCommand() — onDestroy()
开启服务:startService()
停止服务:stopService()

启动方式二 (bindService)

使用Service的步骤如下:

1,定义一个类,并继承 Service
2,在 AndroidManifest.xml 中配置此 Service
3,使用 Context 的 bindService(Intent, ServiceConnection, int) 方法来启动此 Service
4,不使用该服务时,调用 unbindService(ServiceConnection) 方法停止此 Service

绑定服务不会调用 onStart() 或 onStartCommand() 方法。 注意:同一个服务, 只能被同一个启动源, 绑定一次,
除非解绑后, 可以再次绑定

特点:
bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法。

bindService代码
(1)创建服务:自定义类继承Service,返回代理人,方便开启者调用服务中的方法

public class MyService extends Service {
    private static final String TAG = "嘿嘿嘿";

    public MyService() {
        Log.i(TAG, "MyService: hellow");

    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        return new MyBinder();
    }
    class MyBinder extends Binder {
        public MyService getService(){
            return MyService.this;
        }
    }
    public void send(){
        Toast.makeText(this, "发送了", Toast.LENGTH_SHORT).show();
    }
    //服务中提供的方法
    public void take(){
        Toast.makeText(this, "收到了", Toast.LENGTH_SHORT).show();
    }
}

(2)清单文件注册服务:

<service android:name=".MyService"></service>

(3)绑定服务和解除绑定

public class MainActivity extends AppCompatActivity {
    private Intent intent;
    private MyService myService;
    private ServiceConnection connection=new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myService= ((MyService.MyBinder)service).getService();
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.绑定服务
        intent =new Intent(this,MyService.class);
        bindService(intent,connection, Service.BIND_AUTO_CREATE);
    }
    protected void onDestroy() {
        super.onDestroy();
        unbindService(connection);
    }
    public void send(View view){
        myService.send();
    }
}

总结:
绑定方式:onCreate() – onBind() — onUnbind() — onDestroy()
绑定服务:bindService()
解除绑定:unbindService()

【Android 】零基础到飞升 | Service初涉 4.2.1 Service初涉 分类 Android 基础入门教程 本节引言 好的,我们在前三节中对Android中的Activity进行了研究学习,相信大家获益良多吧! 本节开始我们继续来学习Android中的第二个组件:Service(服务), 好,废话不多说,开始本节内容! 1.线程的相关概念 在开始学习Service之前我们先来了解下线程的一些概念! 1)相关概念: 程序:为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)... 阅读详情

相关推荐

解决rt-thread上使用SPI+DMA

首先阐述下遇到的问题 使用SPI读取icm20602数据,读取频率为1000hz,使用stm32f407主控,发现CPU占用率达到了70%,将此线程注释掉后CPU占用率掉到25%,看来这里要着重优化,便萌生了使用DMA的想法。 使用SPI+DMA要进行的配置 1.开启RTT设备驱动。点击自己的工程 ->RT-Thread Setting2.在board.hzhong3.在board.c文件里加入以下函数,此函数受设备框架调用 void HAL_SPI_MspInit(SPI_HandleTypeDef

响望的博客 8088

安卓:service,启动service和绑定service生命周期

一。 startService: 生命周期为: 逻辑代码文件: package com.example.day22_startservice_life; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Vi

my_worldlet的博客 1131

深度学习——VGG16模型详解

1、网络结构 VGG16模型很好的适用于分类和定位任务,其名称来自牛津大学几何组(Visual Geometry Group)的缩写。 根据卷积核的大小核卷积层数,VGG共有6种配置,分别为A、A-LRN、B、C、D、E,其中D和E两种是最为常用的VGG16和VGG19。 介绍结构图: conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128; input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为

橙子的博客 12万+

Service的两种启动方式和对应的生命周期

两种启动方式 startService()启动方式:主要用于执行后台计算 bindService()启动方式:主要用于和其它组件的交互 说明:这两种状态是可以共存的,即一个Service既可以处于启动状态,也可以同时处于绑定状态。

jiaohanhan的博客 1万+

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形

Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。

Giver的博客 1928

VS2022配置Qt6

VS2022配置QT教程

Life is a struggle ! 6361

Android中对服务Service的理解,Service生命周期学习,如何启动Service及代码验证

1,对服务Service的理解: Android 服务(Service)适合执行那些不需要和用户交互而且还要求长期运行的任务。 服务的运行不依赖于任何用户界面,即使 APP 被切换到后台,或者打开了另外一个 APP,服务仍然能够保持正常运行 但是当某个 APP 进程被杀掉时,那么这个 APP 所创建的所有服务也就停止了 另外,服务本身并不会自动开启线程,服务代码默认是运行在主线程中的。所以如...

panshi5188的博客 1716

Keil 5安装教程(C51与MDK共存)

目录前言MDK的安装C51的安装安装完成后的验证新建C51工程添加C51程序文件编译测试总结 前言 本篇文章将介绍嵌入式开发工具Keil 5的安装方法,并使MDK(Microcontroller Development Kit,开发stm32时会用到)和C51(51单片机C语言软件开发系统)共存。今后使用Keil 5可同时开发51单片机程序和ARM单片机程序,便于学习与从51到32的过渡。 注: 为防止商业纠纷,本篇文章不涉及文中软件的注册破解,请支持正版。 同时为了便于今后更深入的学习,本文不会介绍软件的

xushu_me的博客 6万+

bindService启动的Service的生命周期

Brain_hao的博客 965

如何用 Python 实现自动化测试?详细步骤和代码示例

Python自动化测试实战指南 本文系统介绍了使用Python构建自动化测试体系的完整方案。主要内容包括: 环境搭建:Python 3.8+虚拟环境配置,安装pytest、Selenium等核心测试库 分层测试实现: 单元测试:通过计算器示例演示pytest断言和异常测试 API测试:使用requests库进行RESTful接口验证 UI测试:Selenium WebDriver实现网页交互测试 高级特性: 使用fixture管理测试依赖 参数化实现数据驱动测试 生成HTML和Allure测试报告 GitH

m0_64424835的博客 451

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 273

Service生命周期和启动方式

Service生命周期和启动方式一.Service介绍二.两种状态三.创建方式1.自定义类继承Service实现类中onCreate(),onBind()方法2.清单文件中注册四.启动方式1.startService2.bindService效果具体代码三.两者区别 一.Service介绍 Service也是Android的四大组件之一,单词本身的含义“服务”。就像我们计算机中的服务器一样,没有界面默默运行在后台。所以在Android中它是一个后台运行的组件,主要去执行一些耗时操作,或者是执行一些特定操作。

amynn的博客 851

Proteus仿真——电压比较器

电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。

weixin_58745307的博客 3377

第十四单元 Service生命周期和启动方式

Service生命周期和启动方式一、Service1.Service介绍2.Service特点二、Service启动方式1.startService验证方法,打印生命周期2.bindService两种启动方式相比 一、Service 1.Service介绍 1.Service,服务,是四大组件之一, 和Activity 非常相似, 一般运行在后台, 没有用户界面, 可执行的程序 2.Activit...

qq_45272980的博客 330

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

14第十四单元Service生命周期和启动方式(基础知识)

14第十四单元Service生命周期和启动方式(基础知识)Service一.Service介绍二.Service特点三. 如何创建Service Service 一.Service介绍 1.Service,服务,是四大组件之一, 和Activity 非常相似, 一般运行在后台, 没有用户界面, 可执行的程序 2.Activity 和 Service的区别 (1)不同点: Activity : 可以...

XSD_Andy的博客 266

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android Service两种启动方式详解

1. 概念 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalService)和远程服务(RemoteService): 1、本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不需要IPC, 也不需要AIDL。相应bindService会方便很多。主进程被Kill后,服务便会终止。 2、远...

韬霖笔记 6364

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

第十四单元总结

Toast.makeText(this, "停止音乐", Toast.LENGTH_SHORT).show();一旦“启动”将与访问它的组件无关,即使访问它的组件被销毁了,这个服务也一直运行下去,直到手动调用停止服务才被销毁。在绑定模式下,当所有绑定到Service的客户端都解绑的时候,service会被销毁。//参数一:上下文 参数二:自定义服务类.class。//参数一:上下文 参数二:自定义服务类.class。//参数一:上下文 参数二:自定义服务类.class。

l89349062的博客 95

Android Service两种启动方式详解(总结版)

1. 概念 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalService)和远程服务(Remot...

测试0901-1 576

43. 【Android教程】服务:Service

我们还是先来看看官方文档的部分解释:还是用我蹩脚的英语给大家简单翻译一下:Service 是 Android 四大组件之一,通常用来执行一些需要长时间运行并且不需要和用户发送交互的任务,或者是要持续给其他 App 提供服务的场景。每一个服务和 Activity 一样,需要在包下的 “AndroidManifest.xml”文件中添加注册,Service可以通过或者两种方式启动。简而言之,Service适用于无 UI 界面并且长时间运行或者专门给其他 App 提供服务的场景。

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 1174

Android 二 第十四单元

Service生命周期和启动方式欢迎使用浩浩写的博客Service介绍Service特点Service的启动方式Service生命周期 欢迎使用浩浩写的博客 Service介绍 Service是Android的四大主键之一,使用方法和Acivity相似,但是没有运行时的界面,是在后台运行的。 Service特点 service在后台运行,不用与用户进行交互。即使应用退出,服务也不会停止。 当应用进...

haohao_9的博客 109
上一篇: 第十二单元:BroadCastReceiver
下一篇: 第十五单元 后台操作及IntentService
安久儿
博客等级 码龄8年 2粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值