四级没过写android翻译——service

2024-04-25 03:32

本文主要是介绍四级没过写android翻译——service,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务(http://developer.android.com/guide/components/services.html)




服务是一个不提供界面的应用程序组件,该组件可以在后台执行耗时操作。其他的应用程序组件可以启动服务,即使用户切换到其他的应用程序,服务仍可以在后台继续运行。另外,一个组件可以绑定一个服务并与之交互甚至执行IPC。例如,一个服务可以处理网络事务、播放音乐、执行文件的I/O操作,或者与内容提供者交互,这些交互都在后台执行。


本质上,一个服务可以采取两种形式:
启动:
当一个应用程序组件(例如:activity)通过执行startService()即可启动服务。一旦启动,服务即可立即在后台运行,即使启动它的组件被销毁。通常,被启动的服务顺序执行操作且不返回结果给启动它的组件。例如,它可以通过网络下载或者上传文件。当操作结束,服务应该结束它自己。
绑定:
当一个应用程序组件通过执行bindService()即可绑定一个服务。绑定服务以一种C/S模式接口展现,它允许组件与服务交互,发送请求,获取结果,甚至执行跨进程的IPC。一个可以绑定的服务仅仅当另一个应用程序组件去绑定它才会运行。多个组件可以一次绑定到服务,但是当它们全部解除绑定,服务会被销毁。

尽管这篇文档通常分开讨论这两种服务,但是你的服务可以以这两种方式工作,它可以启动(无限期的运行)和绑定。It’s a simply a matter of 你是否实现一个对回调方法:onStartCommand()允许组件去启动服务,onBind()运行组件去绑定服务。

不管你的应用是启动、绑定、还是既启动又绑定,任何应用程序组件都可以使用服务(甚至包括来自独立的应用)。任何组件都可以使用activity的Intent以同样的方式启动服务。然而,你可以为了阻止其他其他程序的进入在Manifest文件中声明服务类型为私有,这个问题的更多讨论在“在manifes中声明服务” 章节中。
注意:服务运行在他进程的主线程当中,服务不创建它自己的线程,除非你特别指定,服务不运行在单独的进程。这意味着,如果你的服务将要执行CPU密集型工作,如:播放MP3或者网络操作,你应该在服务内部创建新的线程来做这些工作。通过使用独立的线程,你将会减少ANR错误的风险,同时,应用程序的主线程可以继续专注于用户与你的activities的交互。

基本的:
创建一个服务,你必须创建一个Service的子类或者已存在的Service的子类。在你的实现类中,你必须重写一些回调方法处理服务生命周期的关键环节,如果有必要,提供组件绑定到服务的机制。你需要实现的最重要的方法如下:
onStartCommand()
当其他组件如activity通过调用startService()请求启动服务,系统调用此方法。一旦此方法执行,服务即被启动并立即在后台运行。如果你实现了此方法,当服务的工作完成时,你有必要调用stopSelf()或者stopService()终止服务(如果你仅仅希望提供绑定,此方法不必实现)。
onBind()
当其他组件想通过调用bindService()绑定服务(如执行RPC)时,系统调用此方法。在你的对此方法的实现中,你必须通过返回一个IBinder对象实现客户端与服务交互的接口。此方法你必须实现的,但是,如果你不运行绑定,你应该返回null。
onCreate()
当服务第一次启动执行一次初始化程序的时候(在调用onStartCommand()或者onBind()之前),系统调用此方法。如果服务已经运行,此方法不会被调用。
onDestory()
当服务不再使用将要被销毁的时候系统调用此方法。你的服务应该实现此方法来清理任何资源,如线程,注册的监听器,接收者等。这是服务接收到的最后一方法

如果一个组件通过调用startService()启动服务(这将导致调用onStartCommand方法),服务会一直保持运行直到它调用stopSelf()或者其他组件通过调用stopService()才会停止。

如果一个组件通过调用bindService()创建一个服务(onStartCommand()不会被调用),then the service runs only as long as the component is bound to it,一旦所有的客户端从服务解绑,系统会销毁服务。

Android系统仅仅在内存低的时候和用户强制系统恢复activity的系统资源时才会强制结束服务。如果用户强制结束一个绑定到activity的服务,此服务不太可能被干掉。如果服务被声明为在前台运行(稍候讨论),它几乎永远不会被干掉。另外,如果服务已经启动并长时间运行,随着时间的推移,系统将会把它放在后台任务列表的低(优先级)位置,同时服务变的更容易被干掉,如果你的服务将被启动,你必须巧妙的设计处理被系统的重启。如果系统干掉了你的服务,当资源再次变的可以系统会重启服务(不过,这依然依赖你从onStartCommand()的返回值,稍候讨论)。更多系统可能会在何时销毁服务的信息,参考文档:Processes and Threading。


在接下来的章节,你将会看到如何创建各种类型的服务和如果在其他组件中使用。

待续 2013-05-18

这篇关于四级没过写android翻译——service的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D