移动应用开发-第九章服务

2024-06-20 21:44

本文主要是介绍移动应用开发-第九章服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务是一个长期运行在后台的用户组件,没有用户界面。除了可以在后台下载文件之外,还可以在后台执行很多任务。

9.1服务概述

可以与其他组件进行交互,一般是由Activity启动,但并不依赖于Activity。它有自己的生命周期。

具有较长的时间运行特性,主要有后台运行与跨进程访问两个应用场景。

①后台运行:可以在后台长时间进行操作而不用提供界面信息,只有当系统必须要回收内存资源时,才会被销毁,否则Service会一直在后台运行。

②跨进程访问:当Service被其他应用组件启动时,即使用户切换到其他应用,服务仍将在后台继续运行。其运行是在主线程中进行的。

9.2服务的创建

<service>标签中有3个属性,分别是name,enabled,exported,其中name属性表示服务的路径,enabled属性表示系统是否能够实例化该服务,exported属性表示该服务是否能够被其他应用程序中的组件调用或进行交互。

9.3服务的生命周期

服务的启动方式有两种:一种是通过startService()方法启动服务,另一种是通过bindService()方法启动服务。使用不同的方式启动服务,其生命周期会不同

①当调用startService()方法启动服务时,程序执行服务的生命周期方法依次为onCreate(),onStartCommand(),onDestroy()。

②当通过bindService()方法启动服务时,执行的生命周期方法依次为onCreate(),onBind(),onUnbind(),onDestroy()。

两种启动服务的方法:

①startService():启动服务

②bindService():启动服务后可以进行有限交互。

onCreate():第一次创建服务时执行的方法

onStartCommand():调用startService()方法启动服务时执行的方法。

onBind():调用bindService()方法启动服务时执行的方法。

onUnbind():调用unBindService()方法断开服务绑定时执行的方法。

onDestory():服务被销毁时执行的方法。

 

9.4服务的启动方式

1,调用startService()方法启动服务。

2,调用bindService()方法启动服务

9.5服务的通信

通过bindService()方法开启服务后,服务与绑定服务的组件是可以通信的,通过组件可以控制服务并进行一些操作。

1,本地服务通信和远程服务通信

本地服务通信是指应用程序内部的通信。远程服务通信是指两个应用程序之间的通信。

①本地服务通信:首先需要创建一个Service类,该类会提供一个onBind()方法,onBind()方法的返回值是一个lBinder对象,lBinder对象会作为参数传递给ServiceConnection类中的onServiceConnected(ComponentName name,IBinder service)方法。这样访问者就可以通过lBinder对象与service进行通信。

②远程服务通信:完成不同进程之间的通信。它是通过AIDL实现的。

AIDL语言:AIDL定义接口的源代码必须以.aidl结尾。AIDL接口中用到的数据类型,除了基本数据类型String,List,Map,CharSequence之外,其他类型全部都需要导入包,即使它们在同一个包中。

 

 

这篇关于移动应用开发-第九章服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079336

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁