四级没过写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

相关文章

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目