`

service

阅读更多

service运行在主进程的主线程中

service在manifest中的配置。如果你想让service只在本应用程序中有效(即不被别的应用程序访问到)有两种方法

   1:不要配置<intenfilter>,没有<intentfilter>,别的应用程序访问不到你的service,你要访问启动service只能显示启动(intent中明确指出要启动的service的类名)

   2:在<service>标签中配置android:exported="false"属性(不论你有没有配置<intentfilter>此service都将是应用程序私有的)。

if your service performs intensive or blocking operations while the user interacts with an activity from the same application, 

the service will slow down activity performance. To avoid impacting application performance,you should start a new thread inside the service.

A started service must manage its own lifecycle. That is, the system does not stop or destroy 

the service unless it must recover system memory and the service continues to run after onStartCommand() returns. 

So, the service must stop itself by calling stopSelf() or another component can stop it by calling stopService().

It's important that your application stops its services when it's done working, to avoid wasting system resources and consuming battery power.

service一旦运行,将在后台一直运行,直到你显示停止service。service一般不会被android回收(内存非常紧张的时候还是会被回收的),

        一般activity会优先被回收,实在没办法了,才会考虑回收service。

        在service里开启一个线程去执行下载(或者其他的耗时的任务)而不在activity里直接开启一个线程去下载是因为,一旦activity所在的进程被杀死,他的子线程也会被杀死。

        而service的生存能力比较强,只要服务不停止(即没显示停止service),则服务所在的进程里就有活动的组件(四大组件,activity,broadcast,service,contentprovider),

        这样该进程就不是空进程(没有任何活动组件的进程,空进程容易被杀死,那么正在工作的子线程也会被杀死)则该进程就不会那么容易被android回收。所有service里所开启的线程一般不会被杀死。

 

1、Service的种类

 

按运行地点分类:

 

类别 区别 优点 缺点 应用

 

本地服务(Local) 该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多。 主进程被Kill后,服务便会终止。 非常常见的应用如:HTC的音乐播放服务,天天动听音乐播放服务。

 

远程服务(Remote) 该服务是独立的进程, 服务为独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。 该服务是独立的进程,会占用一定资源,并且使用AIDL进行IPC稍微麻烦一点。 一些提供系统服务的Service,这种Service是常驻的。

 

其实remote服务还是很少见的,并且一般都是系统服务。

 

按运行类型分类:

 

类别 区别 应用

 

前台服务 会在通知一栏显示 ONGOING 的 Notification, 当服务被终止的时候,通知一栏的 Notification 也会消失,这样对于用户有一定的通知作用。常见的如音乐播放服务。

 

后台服务 默认的服务即为后台服务,即不会在通知一栏显示 ONGOING 的 Notification。 当服务被终止的时候,用户是看不到效果的。某些不需要运行或终止提示的服务,如天气更新,日期同步,邮件同步等。

 

有同学可能会问,后台服务我们可以自己创建 ONGOING 的 Notification 这样就成为前台服务吗?答案是否定的,前台服务是在做了上述工作之后需要调用 startForeground ( android 2.0 及其以后版本 )或 setForeground (android 2.0 以前的版本)使服务成为 前台服务。这样做的好处在于,当服务被外部强制终止掉的时候,ONGOING 的 Notification 任然会移除掉。

 

BoundService:

You should create a bound service when you want to interact with the service from activities and other components in your application or to expose some of your application's functionality to other applications, through interprocess communication (IPC)

Multiple clients can connect to the service at once. However, the system calls your service's onBind() method to retrieve theIBinder only when the first client binds. The system then delivers the same IBinder to any additional clients that bind, without calling onBind() again.

 

  • A started service

    The service is created when another component calls startService(). The service then runs indefinitely and must stop itself by calling stopSelf(). Another component can also stop the service by callingstopService(). When the service is stopped, the system destroys it..

  • A bound service

    The service is created when another component (a client) calls bindService(). The client then communicates with the service through an IBinder interface. The client can close the connection by callingunbindService(). Multiple clients can bind to the same service and when all of them unbind, the system destroys the service. (The service does not need to stop itself.)

These two paths are not entirely separate. That is, you can bind to a service that was already started withstartService(). For example, a background music service could be started by calling startService() with an Intent that identifies the music to play. Later, possibly when the user wants to exercise some control over the player or get information about the current song, an activity can bind to the service by callingbindService(). In cases like this, stopService() or stopSelf() does not actually stop the service until all clients unbind.

分享到:
评论

相关推荐

    不被杀死 service

    在安卓开发中,Service是一种用于在后台长时间运行的组件,它可以独立于用户界面执行任务,例如播放音乐、网络通信等。"不被杀死的 Service"指的是通过特定技术手段实现的Service,它能够在设备清理内存或者用户关闭...

    android service 简单实例源代码

    在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...

    Service 启动与停止

    Service是Android系统中的一个重要组件,它负责在后台执行长时间运行的操作,不依赖于用户界面。在Android应用开发中,理解Service的启动与停止机制对于创建高效、稳定的后台服务至关重要。 一、Service概述 ...

    oracle service_name参数

    ### Oracle Service_Name 参数详解 #### 一、概述 在Oracle数据库管理中,`service_name`是一个重要的参数,它用于标识数据库实例所提供的服务名称。通过设置正确的`service_name`,可以确保客户端应用程序能够...

    Activity绑定Service(Kotlin)

    在Android应用开发中,Service是用于执行长时间运行操作的一个组件,而Activity是用户与应用交互的界面。将Activity与Service绑定是一种常见的通信方式,尤其在需要在后台运行任务且需要与用户界面保持交互时。本...

    通过Service播放音频的代码

    在Android开发中,Service是一种可以在后台长时间运行的组件,它不具有用户界面,但可以执行各种后台任务,如播放音乐。本示例的"通过Service播放音频的代码"旨在教你如何利用Service组件来实现音乐播放功能,使得...

    Java Service Wrapper使用总结

    Java Service Wrapper 使用总结 Java Service Wrapper 是一种可以将 Java 应用程序发布为可安装的服务的解决方案,它提供了一种简单的方式来将 Java 应用程序打包成一个独立的服务。下面是 Java Service Wrapper ...

    Android防止service多次执行startCommand

    在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...

    android 录音机 service 例子

    在这个"android 录音机 service 例子"中,我们将深入探讨如何结合Service和MediaRecorder来创建一个能够后台录制音频的应用。 1. **Service基础** Service组件是Android应用开发中的关键部分,它可以在没有用户...

    Service向Activity传值(kotlin)

    在Android应用开发中,Service和Activity是两个非常重要的组件。Service用于在后台执行长时间运行的任务,而Activity则负责用户界面交互。在某些场景下,我们可能需要Service与Activity之间进行数据传递,例如本例中...

    ServiceNow 基础手册

    ServiceNow是当今流行的企业服务管理平台,它提供了一个集成的系统,允许用户在一个统一的界面中管理和自动化企业内部的各种工作流程。ServiceNow平台的基础手册涵盖了该平台的基本使用方法,包括如何导航、管理记录...

    Android-Service与Activity传值

    在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如...

    android多个activity和一个service通信

    在Android应用开发中,Activity和Service是两个关键组件。Activity代表用户界面,而Service则用于在后台执行长时间运行的任务,不直接与用户交互。在实际项目中,常常需要多个Activity与一个Service进行通信,比如本...

    【Android】开机自启动Service

    在Android系统中,Service是一种可以在后台长时间运行的组件,它不提供用户界面,但可以执行各种任务,如播放音乐、网络通信等。当设备启动时,我们有时希望某些Service能够自动启动,以便立即开始执行预定的任务,...

    用SQL语句解决Service Broker未启动的问题

    "解决 Service Broker 未启动的问题" Service Broker 是 SQL Server 中的一个组件,用于实现异步消息传递。它允许数据库管理员创建可靠的、可扩展的消息应用程序。但是,有时可能会遇到 Service Broker 未启动的...

    Android 多个service的action 相同冲突 验证demo

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...

    JavaService-2.0.10 32位,64位

    JavaService-2.0.10 是一个针对Java应用程序的服务包装工具,它允许开发者将Java应用程序作为Windows服务来运行。这个版本提供了32位和64位两种版本,以适应不同操作系统环境的需求。 在Windows系统中,服务是一种...

    Android之Service实现比较大小

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...

    Android系统在新进程中启动自定义服务过程(startService)的原理

    "Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...

    基于Service的简易音乐播放器

    在Android开发中,创建一个基于Service的简易音乐播放器是一个常见的练习,可以帮助开发者理解服务(Service)的概念以及如何处理多媒体播放。在这个项目中,我们关注的是Android 4.1.2版本,它提供了对基本多媒体...

Global site tag (gtag.js) - Google Analytics